向WebAPI2发布请求

时间:2017-06-30 03:35:08

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

我使用WebAPI2编写REST服务

我需要将书添加到db。

我有这个代码模型:

 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请求

enter image description here

但我有这个错误

  

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

我怎么能忍受它?

2 个答案:

答案 0 :(得分:4)

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

application/json

答案 1 :(得分:1)

您必须向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"));

        }
    }