簡體   English   中英

使用MVC Web API發布和接收json

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM