gpt4 book ai didi

asp.net-mvc - 通用 ASP.NET MVC 路由冲突

转载 作者:行者123 更新时间:2023-12-01 13:03:19 25 4
gpt4 key购买 nike

我正在处理旧版 ASP.NET 系统。我说遗留是因为大约 90% 的系统没有测试。我正在尝试修复此项目中的路由,但遇到了一个我希望使用通用路由解决的问题。

我有以下路线:

        routes.MapRoute(
"DefaultWithPdn",
"{controller}/{action}/{pdn}",
new { controller = "", action = "Index", pdn = "" },
null
);

routes.MapRoute(
"DefaultWithClientId",
"{controller}/{action}/{clientId}",
new { controller = "", action = "index", clientid = "" },
null
);

问题是第一条路线占用了我需要路由到第二条路线的所有流量。路由是通用的(在任一路由定义的约束中都没有定义 Controller ),因为整个应用程序中的多个 Controller 共享相同的前提(有时我们需要一个“pdn”,有时我们需要一个“clientId”)。

我如何映射这些通用路由,以便它们到达正确的 Controller 和操作,但又不会过于贪婪?或者我可以吗?这些路线是否过于通用(我开始相信是这种情况)。

此时我唯一的选择(AFAIK)是以下之一:

在约束中,应用正则表达式来匹配 Action 值,如:(foo|bar|biz|bang) 和 Controller 相同:(home|customer|products) 对于每个 Controller 。但是,这有一个问题,我可能需要这样做:

~/Foo/Home/123//应该映射到“DefaultwithPdn”

~/Foo/Home/abc//应该映射到“DefaultWithClientId”

这意味着,如果 Foo Controller 有一个采用 pdn 的操作和另一个采用 clientId 的操作(在这个应用程序中一直发生),则选择了错误的路由。

将这些约束硬编码到每个可能的 Controller / Action 组合中对我来说似乎有很多重复,我觉得我已经研究这个问题太久了,所以我需要另一双眼睛来帮忙。

我可以使用通用路由来处理这种情况吗?或者我是否需要为每个 Controller 设置自定义路由,并将约束应用于这些路由上的操作?

谢谢

最佳答案

通过删除 null 并将其替换为该路由所需的约束来为您的路由添加约束:

对于 PDN,对数字使用正则表达式:

   routes.MapRoute(
"DefaultWithPdn",
"{controller}/{action}/{pdn}",
new { controller = "", action = "Index", pdn = "" },
new { pdn = @"\d+" }
);

对于 ClientID,对所有字符使用正则表达式:

    routes.MapRoute(
"DefaultWithClientId",
"{controller}/{action}/{clientid}",
new { controller = "", action = "index", clientid = "" },
new { clientid = @"[A-Za-z]+" }
);

因为我没有记住正则表达式的细节,所以我 generally use a cheat sheet .

关于asp.net-mvc - 通用 ASP.NET MVC 路由冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4554654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com