我想创建 2 个具有相同 URL 和 Http Verb 的操作方法,但基于布尔标志有条件地仅将其中一个调用到 Web API 框架。实现这一目标的最佳方法是什么?
[HttpPost]
[Route("api/data/{id}")]
public HttpResponseMessage PostV1(long id, RequestDTO1 v1) {
}
[HttpPost]
[Route("api/data/{id}")]
public HttpResponseMessage PostV2(long id, RequestDTO2 v2) {
}
应该在运行时根据布尔标志调用 PostV1 或 PostV2。布尔标志将是功能标志或配置标志。我无法更新 URL 以包含该标志。那不在我的控制之下。
如果版本由在启动时读取的配置开关管理,您可以从操作方法中删除 RouteAttribute 并改为在您的global.asax.cs
or App_Start\RouteConfig.cs
(或您的站点使用的任何内容)中定义路由。使用简单if
条件定义不同情况下的不同路由。
if (configSwitch)
{
routes.MapRoute(
"Custom",
"api/data/{id}",
new {
controller = "MyController",
action = "PostV1"
}
);
}
else
{
routes.MapRoute(
"Custom",
"api/data/{id}",
new {
controller = "MyController",
action = "PostV2" //Notice the version difference
}
);
}
或(略短):
routes.MapRoute(
"Custom",
"api/data/{id}",
new {
controller = "MyController",
action = configSwitch ? "PostV1" : "PostV2"
}
);
有关更多信息,请参阅此知识库文章。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句