请注意,我已经阅读了作为 WebApi 2.2 的一部分的新路由功能,以允许路由继承。但是,这似乎并没有解决我的特定问题。它似乎解决了继承 Action 级别路由属性的问题,但没有解决在类级别定义的路由前缀。 http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-22#ARI
我想做这样的事情:
[RoutePrefix("account")]
public abstract class AccountControllerBase : ControllerBase { }
[RoutePrefix("facebook")]
public class FacebookController : AccountControllerBase
{
[Route("foo")]
public async Task<string> GetAsync() { ... }
}
[RoutePrefix("google")]
public class GoogleController : AccountControllerBase
{
[Route("bar")]
public async Task<string> GetAsync() { ... }
}
我希望继承 account
路由前缀,因此在定义 Facebook 和 Google Controller 时,我得到路由:
~/account/facebook/foo
~/account/google/bar
目前,路由的定义没有来自基类的 account
部分。
最佳答案
我也有类似的需求。我所做的是:
public class CustomDirectRouteProvider : DefaultDirectRouteProvider
{
protected override string GetRoutePrefix(HttpControllerDescriptor controllerDescriptor)
{
var routePrefix = base.GetRoutePrefix(controllerDescriptor);
var controllerBaseType = controllerDescriptor.ControllerType.BaseType;
if (controllerBaseType == typeof(BaseController))
{
//TODO: Check for extra slashes
routePrefix = "api/{tenantid}/" + routePrefix;
}
return routePrefix;
}
}
其中 BaseController
是定义什么是前缀的那个。现在普通前缀可以工作了,您可以添加自己的前缀。配置路由时调用
config.MapHttpAttributeRoutes(new CustomDirectRouteProvider());
关于c# - 在 WebApi 中如何在 Controller 类级别继承路由前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27463061/