Ошибка довольно проста: вы создаете анонимный класс с двумя свойствами с одинаковым именем.Это было бы то же самое, что написать:
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));
}
}