我真的无法理解为什么它不起作用。我有以下代码:
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."
}
但是有关错误的见解:
什么是不正确的?
答案 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()
{