【问题标题】:Post request to WebAPI2向 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' 的对象。"

我怎么能忍受它?

【问题讨论】:

    标签: c# json asp.net-mvc asp.net-mvc-4 asp.net-web-api


    【解决方案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。您不需要手动将其添加到支持的媒体类型中。
    猜你喜欢
    • 2014-03-21
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多