具有一个固定操作的 MVC 路由和具有多个可选参数的控制器

本文关键字:控制器 参数 有一个 操作 路由 MVC 具有一 | 更新日期: 2023-09-27 18:34:52

基本上我有一个问题,我想在多个控制器中执行一个默认操作,并对我的自定义 URL 使用多个可选参数,如下所示:

www.mydomain.com/{控制器名称}/{v1}/{v2}/{v3}/{v4}

并且也不希望在 URL 中显示操作名称。我在路由配置中有这个路由.cs

routes.MapRoute(
    name: "Blog",
    url: "{controller}/{v1}/{v2}/{v3}/{v4}",
    defaults: new
    {
        controller = "Blog",
        action = "searchBlog",
        v1 = UrlParameter.Optional,
        v2 = UrlParameter.Optional,
        v3 = UrlParameter.Optional,
        v4 = UrlParameter.Optional
    });
routes.MapRoute(
    name: "Forum",
    url: "{controller}/{v1}/{v2}/{v3}/{v4}",
    defaults: new
    {
        controller = "Forum",
        action = "searchForum",
        v1 = UrlParameter.Optional,
        v2 = UrlParameter.Optional,
        v3 = UrlParameter.Optional,
        v4 = UrlParameter.Optional
    });

BlogController中的操作

public ActionResult searchBlog(string v1=null,string v2 = null, string  v3 = null, string v4 = null)
{
    // use optional parameters here
    return View("Index");
}

ForumController中的操作

public ActionResult searchForum(string v1=null,string v2 = null, string  v3 = null, string v4 = null)
{
    // use optional parameters here
    return View("Index");
}

我的动作命中 0、3 和 4 个参数,但在传递 1 或 2 个参数时无法命中。

例如

  1. www.mydomain.com/{控制器名称}/{v1}/{v2}

  2. www.mydomain.com/{控制器名称}/{v1}

请帮助我/指导我,当我提到我的要求时,在 MVC 中使用路由的正确方法是什么。 感谢您的宝贵时间。 提前谢谢。

具有一个固定操作的 MVC 路由和具有多个可选参数的控制器

您必须通过为每个控制器修复路由来设置这样的路由配置,否则将针对您上面提到的这种情况调用默认路由配置,路由将变为这样。

www.mydomain.com/blog/{v1}/{v2}/{v3}/{v4}

此路由仅适用于博客控制器,因为我们已经在此配置中修复了路由。

routes.MapRoute(
        name: "Blog",
        url: "blog/{v1}/{v2}/{v3}/{v4}",
        defaults: new
        {
            controller = "Blog",
            action = "searchBlog",
            v1 = UrlParameter.Optional,
            v2 = UrlParameter.Optional,
            v3 = UrlParameter.Optional,
            v4 = UrlParameter.Optional
        });

您还必须为论坛的每个控制器手动执行此操作,并且生成的路由仅适用于论坛控制器。

www.mydomain.com/forum/{v1}/{v2}/{v3}/{v4}

routes.MapRoute(
        name: "Forum",
        url: "forum/{v1}/{v2}/{v3}/{v4}",
        defaults: new
        {
            controller = "Forum",
            action = "searchForum",
            v1 = UrlParameter.Optional,
            v2 = UrlParameter.Optional,
            v3 = UrlParameter.Optional,
            v4 = UrlParameter.Optional
        });