asp.net-mvc - 如何根据特定查询字符串参数的值路由到控制器操作?
问题描述
我即将将遗留的 PHP web api 重写为 ASP MVC。对遗留 api 的调用由名为“function”的第一个查询字符串参数区分,该参数具有基于函数参数的可变数量的附加参数。
contoso.com/api.php?function=func1¶m1=x¶m2=y&...
我现在想将基于此参数的这些调用路由到不同的控制器操作,而不是让一个操作有条件地检查“函数”参数的值。
实现这一目标的最佳方法是什么?
解决方案
您可以制作自定义控制器选择器。基本上想法是,您首先制作处理程序,该处理程序将根据您拥有的自定义逻辑在您的控制器上路由您的请求(例如,您的逻辑可能是 - 如果请求具有函数参数 func1 那么您应该在 func1 控制器上路由您的请求。)
你制作处理程序:
public class RouteSpecificHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.Properties["UseCustomSelector"] = true;
return base.SendAsync(request, cancellationToken);
}
}
您制作控制器选择器:
public class CustomSelector : DefaultHttpControllerSelector
{
public CustomSelector(HttpConfiguration configuration) : base(configuration)
{
}
public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
if (request.Properties.ContainsKey("UseCustomSelector") &&
request.Properties["UseCustomSelector"] as bool? == true)
{
//your logic goes here
}
return base.SelectController(request);
}
}
config.Routes.MapHttpRoute(
name: "MyRoute",
routeTemplate: "api/dummy/{id}",
defaults: new {controller = "Dummy", id = RouteParameter.Optional},
constraints: null,
handler: new RouteSpecificHandler { InnerHandler = new HttpControllerDispatcher(config) }
);
您可以在此处查看更多信息: ASP.NET Web API custom IHttpControllerSelector for a single route
推荐阅读
- java - 点击“删除”后删除通知
- reactjs - Bulma Hamberger 扩展右侧而不是底部
- python - 使用 Google Colab 将文件从数组移动到 Google Drive 中的一个目录到另一个目录
- docker - 连接卷时数据源的优先级
- javascript - 从 Typescript 中的配置文件返回 Promise
- python-3.x - 为什么 CSV 文件在 pwd 中时找不到且无法读取?
- database - 如何将位置(城市、国家等)从一个数据库映射到另一个数据库
- php - 如何在 Symfony 路由器中设置可选的主机参数?
- javascript - 使用 javascript 获取获取 api 请求无法在控制台中显示数据,但在 POSTMAN 中有效
- java - 将信息从一个班级传递到另一个班级