我正在尝试通过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" }
);
}
我的目标是:
以下url包含
Pharmacy
。因此,它将使用我的Pharmacy
路线:https://(MySite)/TheDynamicClientsName/public/ProviderSearch/Pharmacy/ByPlan?Benefit=ABC&BenefitGroup=ABC
以下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 ()
药房也是如此