【问题标题】:Can't change default action in RouteConfig MVC5无法更改 RouteConfig MVC5 中的默认操作
【发布时间】:2021-10-07 02:53:34
【问题描述】:

我在 MVC5 应用程序的 Route Config 中配置了一个奇怪的路由行为。 所以,实际上我尝试做非常简单的事情 - 更改路由的默认操作。 为此,我更改了路由的默认值,而不是 action = "Index",而是将其更改为我需要的操作 AddUser(查看代码如下)。

    public class RouteConfig
    {
       public static void RegisterRoutes(RouteCollection routes)
       {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
             name: "ManageUser",
             url: "{controller}/{action}/{id}",
             defaults: new { controller = "ManageUser", action = "AddUser", id = UrlParameter.Optional }
            );
            routes.MapRoute(
             name: "Default",
             url: "{controller}/{action}/{id}",
             defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            ); 
         }
       }

我还有下一个控制器:

[Authorize(Roles ="Admin")]
public class ManageUserController : Controller
{
// GET: ManageUser/AddUser
    [HttpGet]
    public ActionResult AddUser()
    {
        return View();
    }
 }

所以,现在我希望每当用户通过 URL: ManageUser/ 他会被重定向到定义的默认操作,但它不会发生,我只是有404 错误。我可以简单地通过添加索引操作来修复它,然后重定向到 AddUser,但它对我来说似乎不正确。有人可以帮我理解我做错了什么吗?

【问题讨论】:

    标签: c# asp.net routes asp.net-mvc-5


    【解决方案1】:

    我认为,您的配置应该如下所示:

    public class RouteConfig
    {
       public static void RegisterRoutes(RouteCollection routes)
       {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
            routes.MapRoute(
             "ManageUser",
             "ManageUser/{action}/{id}",
             new { controller = "ManageUser", action = "AddUser", id = UrlParameter.Optional }
            );
    
            routes.MapRoute(
             "Default",
             "{controller}/{action}/{id}",
             new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            ); 
         }
       }
    

    第一个参数是路由的名称。其次是 URL,它匹配以 ManageUser 开头的 URL,并允许在您的 ManageUser 控制器中执行其他操作。如您所见,它将默认为AddUser 操作。

    如果你想调用带参数的AddUser,你必须通过完整的url调用它ManageUser/AddUser/1

    【讨论】:

    • 我已经试过了,很遗憾没有用。
    • 您可以尝试将 /{action}/{id} 更改为 /{*path},但我认为我不会有太大帮助 - 只是一个愚蠢的猜测。尝试更深入地了解您的路线映射是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2015-04-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多