zoukankan      html  css  js  c++  java
  • asp.net core webapi处理Post请求中的request payload

    request payload的Content-Type实际上是text/plain的,如果请求的 Content-Type 为 application/json,这将导致415 Unsupported Media Type HTTP error。

    有两个解决方法

    1使用  application/json

    Content-Type采用application/json并确保 request payload是有效的json格式,比如

    
    
    1  {
    2     "cookie": "value"
    3 } 

    Then the action signature needs to accept an object with the same shape as the JSON object.

    创建实体作为接收参数

    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

    
    
     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.it

    技术收录网站:核心技术(http://www.coretn.cn)

    本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

    核心技术(http://www.localyc.com)
  • 相关阅读:
    FCM模糊c均值聚类
    Iris数据集免费下载
    matlab 信息增益函数 入侵检测kudcupp
    KNN分类算法的实现
    Git远程仓库地址变更本地如何修改
    浅析 UART、RS232、TTL 之间的关系(转)
    编译某一个ko模块make modules SUBDIRS=drivers/xxx/
    Linux系统调用之SYSCALL_DEFINE(转)
    【TCP/IP详解】TCP保活机制(转)
    linux cpu、内存、IO、网络的测试工具(转)
  • 原文地址:https://www.cnblogs.com/ImBit/p/8795805.html
Copyright © 2011-2022 走看看