2

我真的不明白爲什麼它不起作用。我有以下代碼:ASP.NET Web Api 2路由問題

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

有什麼不對?

+0

1.您是如何撥打電話的? 2.您爲該項目使用了哪個模板:asp mvc或asp mvc web api? – CodingYoshi

回答

0

我找到了一個解決方案。問題不在路由中。問題在於行動的參數。它不應該在那裏用於POST方法。其他東西保持原樣

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

WebApi路由無法找到您的UploadDocumentAsync方法。在您的應用程序中,您使用路由表(在WebApiConfig類中)和屬性路由。你不需要後者。

您可以將路由表中WebApiConfig類的是,丟棄路線RoutePrefix屬性。

更改你的行動UploadDocumentAsync在配置文件控制器:

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

剛剛離開HttpPost屬性。

你可以通過調用(您可以通過提琴手做到這一點,對exampe)到達您的資源:

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

UPDATE:

或者,如果你真的想有「上傳」部分中您的網址,你可以利用的行動路線屬性:

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

第一:OP希望使用屬性路由並詢問爲什麼屬性路由不起作用。因此,你建議不要使用屬性路由不會回答問題,第二:'[Route(「api/profile/upload」)]'也在改變OP設計路由的方式,因此,這兩個建議都建議改變設計,因此不回答這個問題。 – CodingYoshi

+0

第一:OP沒有問清楚*屬性*路由,也許表路由就足夠了。第二:api/profile/upload將允許他使用如下網址:http(s):// {host}/api/profile /上傳OP需要的內容。 –

+0

@CodingYoshi,早上重讀了這個問題,我想你有可能是對的。 OlegSh,如果是這種情況,請讓我們。 –