首页 > 解决方案 > 找到多个与 URL 错误 MVC 5 匹配的控制器类型

问题描述

在我问一个问题之前,我应该这样说;所有路由都已按Route属性添加到控制器中。它不是thisthis的副本。因为在这种情况下将ID参数(整数类型)传递给了两个不同的函数。

有两个类和两个函数,它们都分离在不同的类中。导航此页面时HomeController.AppPageBlogController.Detail功能冲突。localhost:11111/Blog/this-is-blog-title/1我想运行第二个,如下所述。

在第二个中,Blog段必须在路线的开始处保持稳定。我不想更改或删除。

感谢您的建议和帮助。

第一

public class HomeController : BaseController
    [Route("{title}/{ID}")]              //  -> No problem with this
    [Route("{title1}/{title2}/{ID}")]    //  -> Conflicting attribute
    public ActionResult AppPage(int ID)
    {
        // Some Code
        return View();
    }
}

第二个

public class BlogController : BaseController
    [Route("Blog/{title}/{ID}")]              //  -> Conflicting attribute
    public ActionResult Detail(int ID)
    {
        // Some Code
        return View();
    }
}

标签: asp.net-mvcasp.net-mvc-4controllerroutesattributes

解决方案


尝试将 order 参数添加到路由属性,以便 Blog 路由优先于 title1 路由

默认情况下,所有已定义路由的 Order 值为 0,并且路由从最低到最高处理

public class HomeController : BaseController
    [Route("{title}/{ID}")]              //  -> No problem with this
    [Route("{title1}/{title2}/{ID}", Order = 2)]    
    public ActionResult AppPage(int ID)
    {
        // Some Code
        return View();
    }
}

public class BlogController : BaseController
    [Route("Blog/{title}/{ID}", Order = 1)]             
    public ActionResult Detail(int ID)
    {
        // Some Code
        return View();
    }
}

如果这不起作用,您可以在 RouteConfig.cs 文件中列出它们并在 title1 路由之前写入 Blog 路由

你可以阅读这篇文章了解更多信息

http://rion.io/2015/11/13/understanding-routing-precedence-in-asp-net-mvc/


推荐阅读