[英]Posting and receiving json with MVC Web API
我已經看到類似的情況我的回答,但我有特殊需要總是不同於其他問題。
我將json數據從我的html頁面發送到MVC Web API。 不幸的是,我收到的數據總是為空(我在這里嘗試了很多不同的東西)。 問題是我真的需要以json(字符串)的形式接收數據,因為我的數據非常復雜,不能簡單地通過Web API反序列化(我有自己的自定義反序列化器)。
繼承人的代碼!
首先,將收到ajax post請求的web api控制器
public class ActivityController : ApiController
{
// POST api/activity
public string Post([FromBody]string json)
{
}
}
然后,ajax請求本身
$.ajax("/api/activity", {
contentType: "application/json",
data: { json: ko.mapping.toJSON(fusionedModel) },
type: "POST",
success: function (result) {
...
}
});
就數據而言,它渲染得很好(我使用了與MVC(而不是Web Api)相同的請求,並且服務器正在完美地接收字符串...現在出於某種原因,在我的web api控制器中, “json”param始終為null。 正如我之前所說,重要的是我將數據作為json字符串接收。
編輯:我發現我的問題是這個問題的重復: POST JSON與MVC 4 API控制器但我真的不喜歡答案...必須創建一個對象只是為了封裝字符串是非常臟...
我建議您避免使用標准的body參數綁定,因為該機制假定您正在嘗試將正文反序列化為CLR對象。 嘗試這個,
public class ActivityController : ApiController
{
// POST api/activity
public async Task<HttpResponseMessage> Post(HttpRequestMessage request)
{
var jsonString = await request.Content.ReadAsStringAsync();
return new HttpResponseMessage();
}
}
如果你真的想使用參數綁定,你可以這樣做。
public HttpResponseMessage Post(JToken jToken)
{
return new HttpResponseMessage()
{
Content = new StringContent(jToken.ToString())
};
}
請嘗試使用可以在System.Web.Http上找到的[HttpPost]屬性;
public class ActivityController : ApiController
{
// POST api/activity
[HttpPost]
public string Post([FromBody]string json)
{
}
}
我可能在這里錯了,但看起來你沒有在帖子網址中包含你的動作。 嘗試改變
$.ajax("/api/activity", {
contentType: "application/json",
data: { json: ko.mapping.toJSON(fusionedModel) },
type: "POST",
success: function (result) {
...
}
});
至
$.ajax("/api/activity/POST", {
contentType: "application/json",
data: { json: ko.mapping.toJSON(fusionedModel) },
type: "POST",
success: function (result) {
...
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.