MVC路由问题.Url被映射到错误的路由



我正在尝试通过MapRoute映射特定url的路由。

基本上,如果来自第三方网站的传入url在我的url中的特定点包含单词Pharmacy,我想将它们重定向到特定的操作。

然而,我的问题是,无论何时我输入url,无论它是否包含";Pharmacy";,它们都落入我下面的Pharmacy地图路线中。这是我的路由代码。

注意:下面列出的我的第一条路由中的Pharmacy是我的url中的一个附加项,位于控制器名称(此代码下面的示例中为ProviderSearch(&动作名称(以下代码示例中的ByPlan(:

public override void RegisterArea(AreaRegistrationContext context)
{
string clientConstraint = @"^(?!(home|admin|api)$).*$";
context.MapRoute(
"Pharmacy",
"{client}/{directoryType}/{controller}/Pharmacy/{action}/{id}",
new { controller = "ProviderSearch", id = UrlParameter.Optional, directoryType = "", area = "Public" },
constraints: new
{
client = clientConstraint,
directoryType = new DirectoryTypeConstraint()
},
namespaces: new string[] { "MyNamespaceName.Controllers", "MyNamespaceName.Controllers" }
);
context.MapRoute(
"PublicDirectoryType",
"{client}/{directoryType}/{controller}/{action}/{id}",
new { controller = "App", action = "Index", client = "Home", id = UrlParameter.Optional, directoryType = "", area="Public" },
constraints: new
{
client = clientConstraint,
directoryType = new DirectoryTypeConstraint()
},
namespaces: new string[] { "MyNamespaceName.Controllers", "MyNamespaceName.Controllers" }
);
context.MapRoute(
"PublicLegacy",
"{client}/{controller}/{action}/{id}",
new { controller = "App", action = "Index", client = "Home", id = UrlParameter.Optional, directoryType = "", area = "Public" },
constraints: new
{
client = clientConstraint,
controller = @"^(?!(admin)$).*$"
},
namespaces: new string[] { "MyNamespaceName.Controllers", "MyNamespaceName.Controllers" }
);
}

我的目标是:

  1. 以下url包含Pharmacy。因此,它将使用我的Pharmacy路线:

    https://(MySite)/TheDynamicClientsName/public/ProviderSearch/Pharmacy/ByPlan?Benefit=ABC&BenefitGroup=ABC
    
  2. 以下url不包含Pharmacy。因此,它将忽略我的Pharmacy路由&而是使用列出的第二条路由,名为PublicDirectoryType:

    https://(MySite)/TheDynamicClientsName/public/ProviderSearch/Main
    

正如我所说的,出于某种原因,第二个示例正在通过我的Pharmacy路由进行路由,这是我不想要的。

感谢

IMHO更容易使用控制器属性路由

[Route("~/ProviderSearch/[action]")]
[Route("~/Home/[action]")]
public class HomeController: Controller 
{
[Route("~/ProviderSearch/Main")]
[Route("~/Home/Index")]
public IActionResult Index ()

药房也是如此

最新更新