为什么在路由到 REST Web API get 方法时需要 content-type header?
Why is content-type header needed when routing to an REST WebAPI get method?
如下所示的示例代码,我试图通过调用 http://localhost:51292/API/MyWebAPI/GetData/?Name=John 来访问 get 方法,然后我收到一条错误消息 "请求包含一个实体 body 但没有 Content-Type header。此资源不支持推断的媒体类型 '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);
解决办法就是在Get方法的MyDataDTO
对象类型前加[FromUri]
,如:
[AllowAnonymous]
[HttpGet]
public IHttpActionResult GetData([FromUri] MyDataDTO publicInfo)
{
return Ok(publicInfo);
}
如下所示的示例代码,我试图通过调用 http://localhost:51292/API/MyWebAPI/GetData/?Name=John 来访问 get 方法,然后我收到一条错误消息 "请求包含一个实体 body 但没有 Content-Type header。此资源不支持推断的媒体类型 '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);
解决办法就是在Get方法的MyDataDTO
对象类型前加[FromUri]
,如:
[AllowAnonymous]
[HttpGet]
public IHttpActionResult GetData([FromUri] MyDataDTO publicInfo)
{
return Ok(publicInfo);
}