为什么在路由到 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);
}