gpt4 book ai didi

c# - WebAPI Controller 继承和属性路由

转载 作者:太空狗 更新时间:2023-10-29 18:20:07 26 4
gpt4 key购买 nike

我有几个继承自同一个基类的 Controller 。在他们彼此不共享的不同 Action 中,他们确实有一些是完全相同的。我希望将它们放在我的基类中,因为它们的工作方式完全相同,只是它们是通过不同的路径访问的。

我应该如何使用多个不同的路由来定义这些操作?

我的继承类还设置了一个 RoutePrefixAttribute,因此它们中的每一个都指向不同的路由。

例子

我有一个名为 Vehicle 的基本抽象类,然后继承了 CarBikeBus 等。所有他们会有共同的 Action Move()

/bus/move
/car/move
/bike/move

如何在我的基类 Vehicle 上定义操作 Move() 以便它在每个子类路径上执行?

最佳答案

查看我在这里给出的答案WebApi2 attribute routing inherited controllers ,它引用了这篇文章的答案 .NET WebAPI Attribute Routing and inheritance .

您需要做的是覆盖DefaultDirectRouteProvider:

public class WebApiCustomDirectRouteProvider : DefaultDirectRouteProvider {
protected override IReadOnlyList<IDirectRouteFactory>
GetActionRouteFactories(HttpActionDescriptor actionDescriptor) {
// inherit route attributes decorated on base class controller's actions
return actionDescriptor.GetCustomAttributes<IDirectRouteFactory>(inherit: true);
}
}

完成后,您需要在 Web API 配置中对其进行配置:

public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
.....
// Attribute routing (with inheritance).
config.MapHttpAttributeRoutes(new WebApiCustomDirectRouteProvider());
....
}
}

然后您将能够像这样执行您描述的操作:

public abstract class VehicleControllerBase : ApiController {
[Route("move")] // All inheriting classes will now have a `{controller}/move` route
public virtual HttpResponseMessage Move() {
...
}
}

[RoutePrefix("car")] // will have a `car/move` route
public class CarController : VehicleControllerBase {
public virtual HttpResponseMessage CarSpecificAction() {
...
}
}

[RoutePrefix("bike")] // will have a `bike/move` route
public class BikeController : VehicleControllerBase {
public virtual HttpResponseMessage BikeSpecificAction() {
...
}
}

[RoutePrefix("bus")] // will have a `bus/move` route
public class BusController : VehicleControllerBase {
public virtual HttpResponseMessage BusSpecificAction() {
...
}
}

关于c# - WebAPI Controller 继承和属性路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23343328/

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