gpt4 book ai didi

c# - 在 WebApi 中如何在 Controller 类级别继承路由前缀?

转载 作者:可可西里 更新时间:2023-11-01 08:20:51 27 4
gpt4 key购买 nike

请注意,我已经阅读了作为 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com