request payload的Content-Type其實是text/plain的,若是請求的 Content-Type
爲 application/json
,這將致使415 Unsupported Media Type HTTP error。json
有兩個解決方法api
1使用 application/jsoncookie
Content-Type採用application/json並確保 request payload是有效的json格式,好比mvc
1 { 2 "cookie": "value"
3 }
Then the action signature needs to accept an object with the same shape as the JSON object.app
建立實體做爲接收參數async
1 public class CookieWrapper 2 { 3 public string Cookie { get; set; } 4 } 5 6 ... 7 8 public IActionResult GetRankings([FromBody] CookieWrapper c)
或者使用dynamic、Dictionary
1 public IActionResult GetRankings([FromBody] dynamic c) 2 3 public IActionResult GetRankings([FromBody] Dictionary<string, string> c)
2使用 text/plain
客戶端請求使用 Content-Type
: text/plain,
服務端添加TextPlainInputFormatter
ide
1 public class TextPlainInputFormatter : TextInputFormatter 2 { 3 public TextPlainInputFormatter() 4 { 5 SupportedMediaTypes.Add("text/plain"); 6 SupportedEncodings.Add(UTF8EncodingWithoutBOM); 7 SupportedEncodings.Add(UTF16EncodingLittleEndian); 8 } 9 10 protected override bool CanReadType(Type type) 11 { 12 return type == typeof(string); 13 } 14 15 public override async Task<InputFormatterResult> ReadRequestBodyAsync( 16 InputFormatterContext context, 17 Encoding encoding) 18 { 19 string data = null; 20 using (var streamReader = context.ReaderFactory( 21 context.HttpContext.Request.Body, 22 encoding)) 23 { 24 data = await streamReader.ReadToEndAsync(); 25 } 26 27 return InputFormatterResult.Success(data); 28 } 29 }
並在Startup.cs配置mvc
1 services.AddMvc(options => 2 { 3 options.InputFormatters.Add(new TextPlainInputFormatter()); 4 });
翻譯自https://stackoverflow.com/questions/41798814/asp-net-core-api-post-parameter-is-always-null
做者:B.itpost
技術收錄網站:核心技術(http://www.coretn.cn)網站
本文版權歸做者,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。spa