asp.net-mvc - 冲突的 MVC RouteConig
问题描述
我必须在我的 RouteConfig.cs 中添加一条新路由,但它只有在我删除当前路由之一时才有效。有没有办法解决?有一个更好的方法吗 ?它应该关闭 RouteCollection 吗?
当前的
routes.MapHttpRoute("FhirSearch", "fhir/{type}", new { controller = "Fhir", action = "Search" });
新的
routes.MapHttpRoute("FhirDiseasesList", "fhir/DiseasesList", new { controller = "Fhir", action = "DiseasesList" });
这也是矛盾的
routes.MapHttpRoute("FhirDiseasesList", "fhir/Diseases/List", new { controller = "Fhir", action = "DiseasesList" });
解决方案
但只有当我删除当前路线之一时它才有效
我认为您的两条路线都可以正常工作,但是路由引擎会执行首先指示的路线。所以 - 无论哪条路线首先出现与您的 url 匹配,那条路线都会被执行。
- 我认为最简单的解决方法是真正更改路由 url。这完全取决于您,但请确保它们没有匹配/冲突的路线。
就像分开这个词diseases
和list
你的新路线一样。
routes.MapHttpRoute("FhirSearch", "fhir/Diseases/List", new { controller = "Fhir", action = "DiseasesList" });
- 如果你真的想保留这两条路线,你可以做的是——在你的 Search 操作方法中,添加一个检查 if type == "DiseasesList" 然后重定向。
public ActionResult Search(string type)
{
if(type == "DiseasesList"){
return redirectToAction("DiseasesList");
}
... // do something else
}
编辑:在没有具体路由的情况下提到 OP,它会命中搜索操作
因为routes.MapHttpRoute("FhirRead", "fhir/{type}/{id}", new { controller = "Fhir", action = "Read" });
您可以添加一个仅id
与整数匹配的约束。
routes.MapHttpRoute(
"FhirRead",
"fhir/{type}/{id}",
new { controller = "Fhir", action = "Read" },
new {id = @"\d+" } // routing constraint to only match id with integers
);
推荐阅读
- javascript - 引导表单验证按钮重定向
- c# - 如何在 C# Windows 窗体中从 Sql 表中加载名称和值的组合框?
- r - R中的安然电子邮件分析
- javascript - 这个操作是什么意思?{| ... |} 和 +attrName
- scala - 运行中的 Spark Cassandra 连接器:如果 Cassandra 托管在不同的服务器上,它是如何工作的
- android - Android 9+ 上的媒体投影问题
- c# - 如何检查 Firebase 存储中是否存在目录?
- matplotlib - 卡方检验给出错误的结果。我应该拒绝提议的分配吗?
- android-studio - 避免在 android 上重新加载 arcgis 地图
- security - 我需要在 GCP Cloud Function Security 的 Web 请求中添加什么?