1

私はWeb APIプロジェクトで少しリファクタリングを行っています。そして、私は、すべての必要な属性を持つ抽象クラスのコントローラーの1つを抽出するのがよいと気づきました次のとおりです。抽象的なコントローラーメソッドは認識されません

  • は私の既存のコントローラのうち、抽象クラスとメソッドを抽出:

    [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'属性は具体的なクラスに置かれていますが、私は' Microsoft.AspNet.WebApi.Core.5.2.3 \ lib \ net45 \ System.Web.Httpを逆コンパイルしたものです.dll'(私のプロジェクトがこの属性に使用しているアセンブリです)、RouteAttributeに 'Inherited = true'とマークされています。私はmsdnが反対を示していることにちょっと驚きました。 – kuskmen

+0

この回答は間違っています。リンクされた複製を再検討する。 – Nkosi

関連する問題