c# - 具有一个固定操作的 MVC 路由和具有多个可选参数的 Controller

标签 c# asp.net-mvc asp.net-mvc-routing

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

www.mydomain.com/{controller name}/{v1}/{v2}/{v3}/{v4}

并且也不希望在 url 中包含操作名称。我在 routeconfig.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");
}

我的 Action 命中0、3、4个参数,传1、2个参数就命中不了。

例如

  1. www.mydomain.com/{controller name}/{v1}/{v2}

  2. www.mydomain.com/{controller name}/{v1}

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

最佳答案

您必须通过为每个 Controller 固定路由来设置这样的路由配置,否则将为您上面提到的那种场景调用默认路由配置,并且路由将变成这样。

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

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

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
        });

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

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
        });

关于c# - 具有一个固定操作的 MVC 路由和具有多个可选参数的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35449481/

相关文章:

asp.net-mvc-routing - 使用新的 "[controller]/[action]" token 和区域的 MVC 6 属性路由

c# - CsvHelper 忽略不工作

ajax - 带有 MVC 5 和 Entity Framework 的 jQuery 数据表

c# - 带验证的 MVC 嵌套 View 模型

asp.net-mvc-routing - 无法解析到 MVC Controller 的属性路由

c# - ASP.NET MVC 路由以数字开头的 URL

c# - 克隆/复制获取访问器主体到新类型

c# - 从其他线程调用主线程中的方法

c# - 基于wf 4+的开源工作流引擎项目

c# - 正则表达式不匹配时的自定义错误消息