首页 > 解决方案 > 冲突的 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" });

标签: asp.net-mvc

解决方案


但只有当我删除当前路线之一时它才有效

我认为您的两条路线都可以正常工作,但是路由引擎会执行首先指示的路线。所以 - 无论哪条路线首先出现与您的 url 匹配,那条路线都会被执行。

  1. 我认为最简单的解决方法是真正更改路由 url。这完全取决于您,但请确保它们没有匹配/冲突的路线。

就像分开这个词diseaseslist你的新路线一样。

routes.MapHttpRoute("FhirSearch", "fhir/Diseases/List", new { controller = "Fhir", action = "DiseasesList" });
  1. 如果你真的想保留这两条路线,你可以做的是——在你的 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
);

推荐阅读