![](/img/trans.png)
[英]C# web API POST JSON data using POSTMAN client results in always NULL in FromBody
[英]Trying to PUT string with Postman in local C# web api, always null or fails
將媒體類型更改為x-www-form-urlencoded而不是multipart / form-data。
此外,WebAPI特別關注FromBody參數。 http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/
對你而言,我認為這是相關部分:
- [FromBody]參數必須編碼為= value
剩下的最后一個障礙是Web API要求您以特定格式傳遞[FromBody]參數。 即使我們使用[FromBody]修飾方法的參數之后,這就是我們的值參數在前一個示例中為null的原因。
Web API的模型綁定器不需要大多數客戶端和服務器端框架所期望的相當標准的key = value編碼,而是希望在POST主體中找到[FromBody]值而根本沒有關鍵名稱。 換句話說,它代替key = value,它正在尋找= value。
到目前為止,這部分是將原始類型發送到Web API POST方法中最令人困惑的部分。 一旦你了解它就不會太糟糕,但非常不直觀且不可發現。
那是因為沒有媒體類型格式化程序可以將原始字符串序列化到您的模型中(使用[FromBody]
屬性的路由參數)。
快速而骯臟的解決方法是直接以字符串形式讀取請求正文:
[HttpPut]
public async Task<HttpResponseMessage> Put(HttpRequestMessage request)
{
var myCsv = await request.Content.ReadAsStringAsync();
// do stuff with your string
return new HttpResponseMessage(HttpStatusCode.OK);
}
作為替代方案,您可以自己實現自定義媒體類型格式化程序,根據此答案 。
還有一個類似的Q&A 在這里
我發現解決方案#1對我有用,因為我試圖PUT包含Key / Value對的JSON。 所以最初我的JSON看起來像這樣
{
"subscriber": {
"Id": "2",
"subscriptions":[
{
"Name": "Subscription 1",
"Id": "18",
"IsSubscribed": false
},
{
"Name": "Subscription 2",
"Id": "19",
"IsSubscribed": false
},
{
"Name": "Subscription 3",
"Id": "20",
"IsSubscribed": false
}
]
}
}
但我修改它成為
{
"Id": "2",
"subscriptions":[
{
"Name": "Subscription 1",
"Id": "18",
"IsSubscribed": false
},
{
"Name": "Subscription 2",
"Id": "19",
"IsSubscribed": false
},
{
"Name": "Subscription 3",
"Id": "20",
"IsSubscribed": false
}
]
}
這很有效。 我使用[FromBody]在我的C#web api中識別出Postman的PUT請求
只是為了添加我的位,還有一種解決方案可以將原語傳遞給POST或PUT方法。 只需將模型指定為JObject
。 ASP.Net核心web api然后將傳入的JSON對象(包含字符串等原語)綁定到JObject模型對象中。
您的代碼如下所示:
// POST api/CsvParse
[HttpPut]
public void Put([FromBody]JObject value)
{
//access your string data
string data = value[SPECIFY_KEY_HERE];
if (string.IsNullOrEmpty(data))
throw new Exception("Input is null or empty.");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.