具体实现时,抽象控制器方法无法识别

时间:2017-04-11 12:01:36

标签: c# .net asp.net-web-api controller asp.net-web-api-routing

所以我在我们的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'

的控制器匹配的类型

虽然相同的实现但没有抽象类和方法可以正常工作。

我正在测试这个网址:

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

1 个答案:

答案 0 :(得分:0)

Inherited attribute控制子类是否从超类继承任何特定属性。默认值是true。

不幸的是,对于您的重构,RouteAttributeRoutePrefixAttribute属性都是Inherited = false 的密封分类。您需要在所有具体的控制器类和方法上专门声明这些属性。