带有catch-all路由的ASP.NET Web API PUT

时间:2012-04-07 23:49:23

标签: c# asp.net asp.net-web-api put

使用新的web 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)
{
    ...
}

我想我应该能够使用catch all route,路由信息将被传递给id参数,并且我应该能够从响应对象访问body。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我不认为路线是问题所在。如果你想写它的话,你应该对那条路线没问题。如果您在请求中发送的Content-Type没有适当的MediaTypeFormatter,则会收到该错误。例如,如果您使用JsonMediaTypeFormatter,则需要确保发送

Content-Type: application/json

在您的请求中。它看起来不像你。