2017-04-11 37 views
1

所以我在我們的Web API項目中做了很少的重構,並且我注意到抽取具有所有必需屬性的抽象類中的控制器之一是很好的,所以我做了什麼是:抽象控制器方法在具體的控制器方法中不能被識別

  • 提取抽象類和方法從我現有的控制器:

    [RoutePrefix("api/auth")] 
    public class AdminController : BaseAdminController 
    

所以BaseAdminController看起來是這樣的:

public abstract class BaseAdminController : BaseApiController 
{ 
    [HttpGet] 
    [Route("validatetoken")] 
    public abstract IHttpActionResult ValidateToken(string token); 
} 

這是我使用的路由:

public static void Register(HttpConfiguration config) 
{ 
    // Web API configuration and services 
    // Web API routes 
    config.MapHttpAttributeRoutes(); 
    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{action}/" 
    ); 
} 

現在我注意到,測試與抽象控制器它給人的代碼時拋出:

沒有類型發現控制器匹配命名爲'auth'

雖然同樣的實現,但沒有抽象類和方法的工作很好。

我這個URL測試:

http://localhost:60747/api/auth/validatetoken?auth_token=117a2686-dad3-4b1e-a5eb-94aebed45d06 

回答

0

Inherited attribute控制子類繼承是否從超任何特定屬性。默認值是true。

不幸的是,你的重構中,RouteAttributeRoutePrefixAttribute屬性都與Inherited = 密封classses。您需要在所有具體的控制器類和方法中專門聲明這些屬性。

+0

我不明白..我的'RoutePrefix'屬性放在我的具體類上,whatelse是我反編譯'Microsoft.AspNet.WebApi.Core.5.2.3 \ lib \ net45 \ System.Web.Http .dll「(這是我的項目使用這個屬性的程序集)和RouteAttribute標記爲'Inherited = true'我有點驚訝,MSDN顯示相反.. – kuskmen

+0

這個答案是錯誤的。查看鏈接的副本。 – Nkosi