我想要一个基本控制器,它具有所有控制器的共享最小值,然后从该基本控制器继承每个控制器,并使用特定控制器应该处理的任何操作进行扩展。
[RoutePrefix("api/myapi/{apiVersion}/{id}")]
public abstract class BaseController : ApiController
{
}
[RoutePrefix("foo")]
public class FooController : BaseController
{
// Supposed to have /api/myapi/{apiVersion}/{id}/foo base path
public void Get(int id)
{
// Expected: /api/myapi/v1.0/"some id"/foo
return Ok();
// Result: /foo
}
}
[RoutePrefix("bar")]
public class BarController : BaseController
{
// Supposed to have /api/myapi/{apiVersion}/{id}/bar base path
[Route("{action}", Name="BarAction")]
public void Get(int id)
{
// Expected: /api/myapi/v1.0/"some id"/bar/"an action"
return Ok();
// Result: /bar/{action}
}
}
所以我的想法是建立一个基本网址:http://hostname/api/myapi/v1.0/100,其中100只是一个随机ID。
从这个基础继承的每个控制器都应该扩展url,因此FooController.cs应该扩展到GET http://hostname/api/myapi/v1.0/100/foo,而我的BarController应该有http://hostname/api/myapi/v1.0/100/bar/“一个动作”
由于我正在使用SwashBuckle为我生成SwaggerUI,因此我在mig startup config中添加了一个verion约束:
Startup.cs:
var constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap =
{
["apiVersion"] = typeof(ApiVersionRouteConstraint)
}
};
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes(constraintResolver);
我正在运行Owin self host version 5.3.x / WebApi 2.2。
有人可以告诉我是否可以使用和扩展基类的属性前缀,以及如何?