Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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
Asp.net mvc 2 设置多个RouteConstraint on route参数_Asp.net Mvc 2_Constraints_Routes - Fatal编程技术网

Asp.net mvc 2 设置多个RouteConstraint on route参数

Asp.net mvc 2 设置多个RouteConstraint on route参数,asp.net-mvc-2,constraints,routes,Asp.net Mvc 2,Constraints,Routes,下面是我使用的代码,但编译器说:匿名类型不能有多个同名属性 context.MapRoute("RouteName", "statics/category/{fileName}", new { controller = "myController", acti

下面是我使用的代码,但编译器说:匿名类型不能有多个同名属性

context.MapRoute("RouteName", "statics/category/{fileName}",
                            new
                            {
                                controller = "myController",
                                action = "Index"
                            },
                            new
                            {
                                fileName = new fnRouteConstraint(),
                                fileName = new AnotherRouteConstraint()
                            });

错误非常简单:您正在创建一个匿名类,其中有两个同名的属性。这和写一样:

public class m {
    public string p { get; set; }
    public string p  { get; set; }
}
要解决此问题,您必须创建另一个IRouteConstraint,其中包含您试图传递的两个约束的逻辑。例如:

编辑:

如果要“合并”两个单独的管线约束,只需创建第三个约束,如下所示:

public ThirdRouteConstraint: IRouteConstraint {
    public ThirdRouteConstraint(){}

    public bool Match(HttpContextBase httpContext, Route route,
        string parameterName, RouteValueDictionary values,
        RouteDirection routeDirection) 
    {
        return (new FirstRouteConstraint().Match(httpContext, route, parameterName, values, routeDirection) &&
            new SecondRouteConstraint().Match(httpContext, route, parameterName, values, routeDirection));
    }

}

错误非常简单:您正在创建一个匿名类,其中有两个同名的属性。这和写一样:

public class m {
    public string p { get; set; }
    public string p  { get; set; }
}
要解决此问题,您必须创建另一个IRouteConstraint,其中包含您试图传递的两个约束的逻辑。例如:

编辑:

如果要“合并”两个单独的管线约束,只需创建第三个约束,如下所示:

public ThirdRouteConstraint: IRouteConstraint {
    public ThirdRouteConstraint(){}

    public bool Match(HttpContextBase httpContext, Route route,
        string parameterName, RouteValueDictionary values,
        RouteDirection routeDirection) 
    {
        return (new FirstRouteConstraint().Match(httpContext, route, parameterName, values, routeDirection) &&
            new SecondRouteConstraint().Match(httpContext, route, parameterName, values, routeDirection));
    }

}

给出约束名称:

        routes.MapRoute(
                   name: "app2",
                   url: "app/{id}",
                   defaults: new { controller = "App", action = "Index", id = UrlParameter.Optional },
                  constraints: new { RouteConstraint1 = new RouteConstraint1(),
                                     RouteConstraint2 = new RouteConstraint2() 
                                    }
               );

给出约束名称:

        routes.MapRoute(
                   name: "app2",
                   url: "app/{id}",
                   defaults: new { controller = "App", action = "Index", id = UrlParameter.Optional },
                  constraints: new { RouteConstraint1 = new RouteConstraint1(),
                                     RouteConstraint2 = new RouteConstraint2() 
                                    }
               );

是的,这很简单,我知道,实际上这是一个例子。我想知道如何使用Multi-RouteConstraint。nayyeries没有描述任何在onegood中使用两个RC的方法,因为我是显式地实现IRouteConstraint的,我没有访问Match方法的权限。谢谢,这很简单,我知道,实际上这是一个例子。我想知道如何使用Multi-RouteConstraint。nayyeries没有描述任何在onegood中使用两个RC的方法,因为我是显式地实现IRouteConstraint的,我没有访问Match方法的权限。谢谢