与捕获所有路线的ASP.NET Web API PUT(ASP.NET Web API PUT wi

2019-09-16 10:10发布

随着新的网络API,是有可能使用一个包罗万象的航路

routes.MapHttpRoute(
   name: "name",
   routeTemplate: "api/{*id}",
   defaults: new { controller = "mycontroller", id = RouteParameter.Optional}
);

与PUT方法? 典型地,该PUT方法用于像

public HttpResponseMessage Put(string id, string body)
{
    ...
}

其中body是PUT请求的主体中。 然而,随着包罗万象的路线,这似乎并没有工作,我收到了错误

{
    "ExceptionType":"System.ArgumentException",
    "Message":":"No 'MediaTypeFormatter' is available to read an object of type 'String' with the media type ''undefined''.",
    "StackTrace":"..."
}

在我的put方法看起来像

public HttpResponseMessage Put(string id)
{
    ...
}

我想我应该能够使用包罗万象的路线,在此路由信息将被传递给ID参数,我应该能够从响应对象访问身体。 有任何想法吗?

Answer 1:

我不认为是路线问题。 你应该罚款与途径,如果这就是你想怎么写。 你会得到错误,如果你没有一个合适的MediaTypeFormatter为您发送请求中的内容类型。 例如,如果您使用的是JsonMediaTypeFormatter你需要确保你发送

Content-Type: application/json

在您的要求。 它看起来并不像你。



文章来源: ASP.NET Web API PUT with catch-all route