MVC 5 - 默认区域路由 - 错误的操作名称

时间:2018-02-05 09:52:32

标签: asp.net-mvc routing routes

我已经阅读了Stackoverflow中我可以找到的关于这个主题的所有问题,这些问题还没有那么老,直到现在我还没有找到解决我简单案例的方法。

我刚刚在一个区域中创建了两个控制器,我正在使用默认的自动生成区域路径。

当我尝试访问时:

http://localhost:57969/FieldProduction/CustomerProduction/1

我有一个例外,在Glimpse信息的帮助下,我看到" 1"被解释为动作而不是参数......

enter image description here

I当我尝试使用以下选项访问其中一个区域控制器时

http://localhost:57969/FieldProduction/CustomerProduction/?1

默认操作"索引"使用,但构造函数变量int?我没有被填补。

enter image description here

动作:

    public async Task<ActionResult> Index(int? id)

默认区域控制器路线:

    public override void RegisterArea(AreaRegistrationContext context) 
    {
        context.MapRoute(
            "FieldProduction_default",
            "FieldProduction/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }                
        );
    }

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我打开这个问题是为了寻找可能的其他解决方案,但此刻我能够通过在区域注册中编写自定义路线来解决我的问题

        //**NEW ROUTE**
        context.MapRoute(
            "FieldProduction_CustomerProduction",
            "FieldProduction/CustomerProduction/{id}",
            new { action = "Index", controller = "CustomerProduction", id = UrlParameter.Optional }
        );

        //**ORIGINAL ROUTE**
        context.MapRoute(
            "FieldProduction_default",
            "FieldProduction/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }                
        );

答案 1 :(得分:0)

您的路由认为/ 1是操作名称(但您知道这一点) 您有两种选择: 第一个:像这样添加id参数:

  

http://localhost:57969/FieldProduction/CustomerProduction?id=1

2nd:在此控制器中使用属性路由。

attribute routing

有第三个选项,您可以将正则表达式添加到您的路由,以确定该操作永远不会是int。