为 ASP.NET MVC 3 中的 MapRoute 指定特殊情况处理程序

发布于 2025-01-03 05:56:46 字数 745 浏览 0 评论 0原文

我在 Global.asax 中定义了以下路由:

routes.MapRoute(
                "IncidentActionWithId", // Route name
                "Incidents/{companyId}/{action}/{id}", // URL with parameters
                new { controller = "Incidents" } // Parameter defaults
            );

我有一种特殊的请求情况,如下所示:

/Incidents/SuperCompany/SearchPeople/Ko

在这种情况下,操作确实应该映射到 SearchPeople 操作,comapnyId到此操作的参数,但仅当操作为 SearchPeople 时,Ko 不应映射到操作的 id 参数,而应映射到 searchTerm

我的操作声明是:

[HttpGet]
public ActionResult SearchPeople(string companyId, string searchTerm)

如何实现将 Ko 映射到我的操作方法中的 searchTerm 参数?

I have the following Route defined in Global.asax:

routes.MapRoute(
                "IncidentActionWithId", // Route name
                "Incidents/{companyId}/{action}/{id}", // URL with parameters
                new { controller = "Incidents" } // Parameter defaults
            );

I have a special case of request, like this one:

/Incidents/SuperCompany/SearchPeople/Ko

In this case, action should indeed map to SearchPeople action, comapnyId to this action's parameter, but only when action is SearchPeople, the Ko should not be mapped to an id parameter of the action, but to searchTerm.

My action declaration is:

[HttpGet]
public ActionResult SearchPeople(string companyId, string searchTerm)

How can I achieve Ko to be mapped to searchTerm parameter in my action method?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉态萌生 2025-01-10 05:56:46

您可以定义两种路由,一种使用 id,另一种使用 searchTerm if id 应该是数字(或者您可以指定正则表达式 约束)并且与searchTerm有不同的模式。

请参阅此处如何定义约束。

示例:

routes.MapRoute(
            "IncidentActionWithId", // Route name
            "Incidents/{companyId}/{action}/{id}", // URL with parameters
            new { controller = "Incidents" }, // Parameter defaults
            new {id = @"\d+"} // numeric only
        );

routes.MapRoute(
            "IncidentActionWithId", // Route name
            "Incidents/{companyId}/{action}/{searchterm}", // URL with parameters
            new { controller = "Incidents" } 
        );

注意

首先定义有约束的。

You can define two routes, one with id and one with searchTerm if the id is supposed to be numeric (or you can specify regex constratints) and have different pattern to searchTerm.

See here how you can define constraints.

Example:

routes.MapRoute(
            "IncidentActionWithId", // Route name
            "Incidents/{companyId}/{action}/{id}", // URL with parameters
            new { controller = "Incidents" }, // Parameter defaults
            new {id = @"\d+"} // numeric only
        );

routes.MapRoute(
            "IncidentActionWithId", // Route name
            "Incidents/{companyId}/{action}/{searchterm}", // URL with parameters
            new { controller = "Incidents" } 
        );

NOTE

Define the one with constraint first.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文