所以我在我们的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
答案 0 :(得分:0)
Inherited attribute控制子类是否从超类继承任何特定属性。默认值是true。
不幸的是,对于您的重构,RouteAttribute
和RoutePrefixAttribute
属性都是Inherited
= false 的密封分类。您需要在所有具体的控制器类和方法上专门声明这些属性。