Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC忽略路由值_C#_.net_Asp.net Mvc - Fatal编程技术网

C# ASP.NET MVC忽略路由值

C# ASP.NET MVC忽略路由值,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,我有以下路径:{param1}/{param2}/{param3},我想将它绑定到没有param1参数的操作(这对它来说无关紧要)。如果我不在action方法中定义param1参数,ASP.NET MVC将不会选择路由。所以现在我必须在动作中定义param1参数,只是不使用它 有没有什么方法可以忽略某些路由值,而不必在操作方法中定义它们?为什么不重新排列参数,以便: routes.MapRoute( //// Route name

我有以下路径:{param1}/{param2}/{param3},我想将它绑定到没有param1参数的操作(这对它来说无关紧要)。如果我不在action方法中定义param1参数,ASP.NET MVC将不会选择路由。所以现在我必须在动作中定义param1参数,只是不使用它


有没有什么方法可以忽略某些路由值,而不必在操作方法中定义它们?

为什么不重新排列参数,以便:

        routes.MapRoute(
            //// Route name
            "myNewRoute",
            //// URL with parameters
            "{param2}/{param3}/{param1}",
            //// Parameter defaults
            new { controller = "MyController", action = "MyActionName", param2 = string.Empty, param3 = string.Empty, param1 = string.Empty });
现在,如果只提供前两个参数,则取param2和param3。param1默认为string.empty


如果您提供所有三个参数,则param1、param2和param3都将具有值。

第二种方法是使用2个MapRoutes。请注意,我在此处向路由添加了“Custom”,以确保路由引擎能够区分此路由和采用三个参数且应转到默认asp mvc路由的路由

   routes.MapRoute(
        //// Route name
        "Route1",
        //// URL with parameters
        "Custom/{param2}/{param3}",
        //// Parameter defaults
        new { controller = "MyController", action = "MyActionName", param2 = string.Empty, param3 = string.Empty });


   routes.MapRoute(
        //// Route name
        "Route2",
        //// URL with parameters
        "Custom/{param1}/{param2}/{param3}",
        //// Parameter defaults
        new { controller = "MyController", action = "MyActionName", param2 = string.Empty, param3 = string.Empty, param1 = string.Empty });
我还将Route1放在Route2之前,因此,如果路由引擎看到两个参数,它将更喜欢此路由而不是Route2。如果您提供3个参数,则路由将首选路由2而不是路由1或默认mvc路由

   routes.MapRoute(
        //// Route name
        "Route1",
        //// URL with parameters
        "Custom/{param2}/{param3}",
        //// Parameter defaults
        new { controller = "MyController", action = "MyActionName", param2 = string.Empty, param3 = string.Empty });


   routes.MapRoute(
        //// Route name
        "Route2",
        //// URL with parameters
        "Custom/{param1}/{param2}/{param3}",
        //// Parameter defaults
        new { controller = "MyController", action = "MyActionName", param2 = string.Empty, param3 = string.Empty, param1 = string.Empty });

考虑到我提供的两个答案,我更喜欢这一个,因为它简单。有一个稍微不同的情况,例如/customers/123/orders/456。在本例中,订单id是系统范围内唯一的,因此您希望在URL中包含客户id以保持API的一致性,但不需要在操作方法中使用它。在这种情况下,“丢弃”功能将真正有用