向 WebAPI2 发布请求

Posted

技术标签:

【中文标题】向 WebAPI2 发布请求【英文标题】:Post request to WebAPI2 【发布时间】:2017-12-03 22:11:30 【问题描述】:

我使用 WebAPI2 编写 REST 服务

我需要将书添加到数据库。

我有这个代码模型:

 public class Book

 public int Id  get; set; 
 public string Name  get; set; 
 public string Author  get; set; 
 public int Year  get; set; 


和控制器:

    [HttpPost]
    public void CreateBook([FromBody]Book book)
    
        db.Books.Add(book);
        db.SaveChanges();
    

我尝试从邮递员发送 POST 请求

但是我有这个错误

"Message": "该资源不支持请求实体的媒体类型'multipart/form-data'。", "ExceptionMessage": "没有 MediaTypeFormatter 可用于从媒体类型为 'multipart/form-data' 的内容中读取类型为 'Book' 的对象。"

我怎么能忍受它?

【问题讨论】:

【参考方案1】:

您收到此错误是因为与请求一起发送的 Content-Type 标头是 multipart/form-data 而不是 application/json。发生这种情况是因为您在 Postman 中选择了“表单数据”单选按钮,无论您是否手动输入了标题,它都会自动将 Content-Type 设置为 multipart/form-data。 (这已涵盖in the documentation-- 请参阅“请求正文”部分中的“关于标头的注释”,大约在页面下方的 2/3 处。)尝试选择“原始”,并确保您添加了 Content-Type值为application/json 的标头。然后,在正文部分添加您的 JSON。


    "Id": 1234,
    "Name": "A Book About Nothing",
    "Author": "Joe Schmoe",
    "Year": 1993

【讨论】:

这应该是答案。【参考方案2】:

你必须给 HttpConfiguration 对象添加一个格式化程序,如果这是一个 ASP.NET MVC 项目,你会在 Register 方法下的 WebApiConfig.cs 类中找到它

 public class WebApiConfig
    
        public static void Register(HttpConfiguration config)
        
            //Routes
            config.Routes.MapHttpRoute(/// your routes);

            //Formatters
            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));

        
    

【讨论】:

谢谢。它有帮助 Web API 默认支持application/json。您不需要手动将其添加到支持的媒体类型中。

以上是关于向 WebAPI2 发布请求的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET WebAPI2 CORS:预检时 GetOwinContext 中的空请求

确保 WebAPI2 路由在 MVC 路由之前匹配

您如何在 .net WebApi2 应用程序中的 OAuth2 令牌请求中使用额外参数

如何将 Json 对象从 Fiddler 传递到 Webapi2

向 web api 发送 ajax 请求时出现 401 Unauthorized

WebApi 2 超出最大请求长度