向 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 中的空请求
您如何在 .net WebApi2 应用程序中的 OAuth2 令牌请求中使用额外参数
如何将 Json 对象从 Fiddler 传递到 Webapi2