【ASP.net MVC】【WebAPI】Post的陷阱
本篇為甚麼叫WebAPI的陷阱呢?先說明問題案例好了
小弟因為學校作業要做一個網站,為了有更好的使用者體驗,所以所有的資料傳遞都是透過Ajax以及Signalr。而問題來了,今天在做資料新增的時候,發生了一件怪事,使用Ajax所Post到API的資料都會為null,而且使用Postman傳送也都是null值
以下是小弟一開始所寫出來的WebAPI的Code
本篇為甚麼叫WebAPI的陷阱呢?先說明問題案例好了
小弟因為學校作業要做一個網站,為了有更好的使用者體驗,所以所有的資料傳遞都是透過Ajax以及Signalr。而問題來了,今天在做資料新增的時候,發生了一件怪事,使用Ajax所Post到API的資料都會為null,而且使用Postman傳送也都是null值
以下是小弟一開始所寫出來的WebAPI的Code
public HttpResponseMessage PostNewData(String Message)
{
var HubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<SyncMessageServices>();
HubContext.Clients.All.updateStatus(Message);
return Request.CreateResponse(HttpStatusCode.OK);
}
而Ajax的Code如下
$("#update").click(function () {
$.ajax({
url: "/api/Message",
type: "POST",
data:{Message:$("#status").val()}
});
});
後來發現了一件事情,在WebAPI的POST中需要加上"[FromBody]",表示參數是來自於表單上的Body!
另外,Ajax也有些小小的問題,在data的參數中,只需要一個參數資料,就直接把參數加入就好,而有兩筆以上的參數,才需要利用"{}"來包裹參數值
經過修改的Code,來個小小記錄,希望剛好也跟我問題一樣的朋友有幫助
public HttpResponseMessage PostNewData([FromBody]String Message)
{
var HubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<SyncMessageServices>();
HubContext.Clients.All.updateStatus(Message);
return Request.CreateResponse(HttpStatusCode.OK);
}
----5/31更新,感謝Sky提醒----
今天sky給我一篇文章,上面說明了我們的錯誤問題,改成這樣也可以通!
$("#update").click(function () {
$.ajax({
url: "/api/Message",
type: "post",
data: {"":$("#status").val()}
});
});
--Old---
$("#update").click(function () {
$.ajax({
url: "/api/Message",
type: "post",
data: $("#status").val(),
contentType: "application/json"
});
});
大家好我是饅頭,希望大家喜歡我的文章
如果有錯誤的地方請不吝指教 ^_^