我想创建具有相同URL和Http Verb的2个操作方法,但是有条件地仅基于布尔标志调用其中一个到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。这不在我的控制之下。
答案 0 :(得分:2)
如果版本由在启动时读取的配置开关控制,您可以从操作方法中删除RouteAttribute,而是在global.asax.cs
或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"
}
);
有关详细信息,请参阅this knowledge base article。
答案 1 :(得分:1)
我假设"标志"在URL中发送,是吗?那么为什么不把它放在路线上呢?
if($request->hasFile('file'))