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