ASP.NET Web Api 2路由问题

时间:2017-10-08 20:08:10

标签: asp.net-web-api asp.net-web-api2 asp.net-web-api-routing

我真的无法理解为什么它不起作用。我有以下代码:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

[RoutePrefix("api/Profile")]
[System.Web.Http.AuthorizeAttribute]
[IdentityBasicAuthenticationAttribute]
public class ProfileApiController : ApiController
{
    [HttpPost]
    [ValidateApiContentLength]
    [ValidateApiMimeMultipart]
    [Route("Upload")]
    public async Task<HttpResponseMessage> UploadDocumentAsync(string description)
    {
       //....
    }
}

}

但是当我致电:http://localhost:11015/api/profile/Upload

我收到404错误:

{
    "Message": "No HTTP resource was found that matches the request URI 'http://localhost:11015/api/profile/Upload'.",
    "MessageDetail": "No action was found on the controller 'ProfileApi' that matches the request."
}

但是有关错误的见解:

enter image description here

什么是不正确的?

2 个答案:

答案 0 :(得分:0)

WebApi路由找不到您的 UploadDocumentAsync 方法。在您的应用程序中,您使用路由表(在WebApiConfig类中)和属性路由。你不需要后者。

您可以将路由表保留在WebApiConfig类中,然后删除路由 RoutePrefix 属性。

将配置文件控制器中的操作UploadDocumentAsync更改为:

...
[HttpPost]
public async Task<HttpResponseMessage> UploadUploadDocumentAsync(string description)
{
...

离开 HttpPost 属性。

您可以通过致电(您可以通过Fiddler,例如)来访问您的资源:

POST http://localhost:11015/api/profile/

更新:

或者,如果您真的想在网址中添加“上传”部分,可以使用路线属性进行操作:

[Route("api/profile/upload")]

答案 1 :(得分:0)

我找到了解决方案。问题不在路由中。问题在于行动参数。它不应该用于POST方法。其他事情保持原样

    [HttpPost]
    [ValidateApiContentLength]
    [ValidateApiMimeMultipart]
    [Route("upload")]
    public async Task<HttpResponseMessage> UploadDocumentAsync()
    {