установка более одного RouteConstraint для параметра маршрута - PullRequest
0 голосов
/ 19 июня 2010

вот код, который я использую, но компилятор говорит: Анонимный тип не может иметь несколько свойств с одинаковым именем

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

Ответы [ 2 ]

5 голосов
/ 26 мая 2016

Дайте ограничения именам:

        routes.MapRoute(
                   name: "app2",
                   url: "app/{id}",
                   defaults: new { controller = "App", action = "Index", id = UrlParameter.Optional },
                  constraints: new { RouteConstraint1 = new RouteConstraint1(),
                                     RouteConstraint2 = new RouteConstraint2() 
                                    }
               );
1 голос
/ 19 июня 2010

Ошибка довольно проста: вы создаете анонимный класс с двумя свойствами с одинаковым именем.Это было бы то же самое, что написать:

public class m {
    public string p { get; set; }
    public string p  { get; set; }
}

Чтобы решить проблему, вам нужно создать еще одну IRouteConstraint, которая содержит логику из двух ограничений, которые вы пытаетесь передать.Пример: http://nayyeri.net/custom-route-constraint-in-asp-net-mvc

РЕДАКТИРОВАТЬ:

Если вы хотите "объединить" два отдельных ограничения маршрута, вам просто нужно создать третье ограничение, например:

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));
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...