从继承的类扩展基本路由前缀

时间:2017-09-06 11:15:41

标签: c# asp.net-web-api2

我想要一个基本控制器,它具有所有控制器的共享最小值,然后从该基本控制器继承每个控制器,并使用特定控制器应该处理的任何操作进行扩展。

[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。

有人可以告诉我是否可以使用和扩展基类的属性前缀,以及如何?

0 个答案:

没有答案