为啥在路由到 REST WebAPI 获取方法时需要内容类型标头?
Posted
技术标签:
【中文标题】为啥在路由到 REST WebAPI 获取方法时需要内容类型标头?【英文标题】:Why is content-type header needed when routing to an REST WebAPI get method?为什么在路由到 REST WebAPI 获取方法时需要内容类型标头? 【发布时间】:2020-07-16 12:41:47 【问题描述】:作为下面显示的示例代码,我试图通过调用 http://localhost:51292/API/MyWebAPI/GetData/?Name=John 来访问 get 方法,然后我收到一条错误消息 "请求包含实体主体但没有 Content-Type 标头。此资源不支持推断的媒体类型“application/octet-stream”。"
public class MyData
int ID get; set;
public class MyDataDTO : MyData
string Name get; set;
public class MyWebAPIController : ApiController
[AllowAnonymous]
[HttpGet]
public IHttpActionResult GetData(MyDataDTO publicInfo)
return Ok(publicInfo);
我没有找到任何适当的理由说明为什么它需要内容类型,也许它与 API 控制器或路由有关?我的路由如下图:
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "API/controller/action"
);
app.UseWebApi(config);
【问题讨论】:
I am trying to access the get method by visiting http://localhost:51292/API/MyWebAPI/GetData/?Name=John
在您的网络浏览器中?在邮递员?还有什么?
在我的网络浏览器中。
也许您错过了添加输入格式化程序? Similar topic
请显示来自您的网络浏览器开发工具的请求和响应标头。
从表面上看错误,asp.net希望您设置一个内容类型标头,以便它可以理解请求正文-并非不合理,我不知道问“为什么”是否会解决任何东西 - 只需提供标题并继续.. 我更好奇您是如何设法触发服务器投诉您的请求在 GET 时具有正文,据称输入到浏览器地址栏中..跨度>
【参考方案1】:
解决方法就是在 Get 方法的 MyDataDTO
对象类型之前添加 [FromUri]
,例如:
[AllowAnonymous]
[HttpGet]
public IHttpActionResult GetData([FromUri] MyDataDTO publicInfo)
return Ok(publicInfo);
【讨论】:
以上是关于为啥在路由到 REST WebAPI 获取方法时需要内容类型标头?的主要内容,如果未能解决你的问题,请参考以下文章