ASP.NET MVC - передача параметров для маршрута по умолчанию с использованием RouteConstraint

Я сталкиваюсь с проблемой, имеющей 2 маршрута asp.net mvc по умолчанию (применяемых через пользовательские ограничения). То, что я пытаюсь сделать, это загрузить различные представления в зависимости от того, указаны ли параметры в Routedictionary или нет. Ниже приведены мои два маршрута в RouteConfig.cs

        routes.MapRoute(
            name: "DefaultWatch",
            url: "{controller}/{action}/{title}",
            defaults: new { controller = "Watch", action = "Index", title = ""},
            constraints: new { title = new VideoTypeRouteConstraint() }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}",
            defaults: new { controller = "Main", action = "Index"}
        );

Я хочу открыть /watch/Index/{title} если указана строка заголовка или просто открыть маршрут по умолчанию /Main/Index, Ниже приведена реализация моего ограничения маршрута.

В VideoTypeRouteConstraint.cs

public class VideoTypeRouteConstraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        if (values.ContainsKey(parameterName))
        {
            string value = values[parameterName].ToString();
            return !String.IsNullOrEmpty(value) ? true : false;
        }
        return false;
    }
}

Что я пытаюсь сделать, проверьте, если RouteValueDictionary содержит переменную заголовка и, если так, возвращает истину, так что мой /Watch/Index/{title} выполнен.

Теперь это работает, когда я нажал на URL ниже

http://localhost:53923/    //returns /Main/Index correctly
http://localhost:53923/?title=routing-optional-parameters-in-asp-net-mvc-5  //Also returns /Main/Index because the value in RouteValueDictionary is null but I can see the value in httpContext.Request[parameterName]

http://localhost:53923/routing-optional-parameters-in-asp-net-mvc-5  //this DOES NOT WORK - Returns 404

RouteValueDictionary содержит ключ (заголовок), но его значение всегда равно нулю. Вот где проблема, я верю, но я не могу ее идентифицировать.

Вся идея этого состояла в том, чтобы очистить мои URL для SEO которые были намного дольше, когда я использовал отдельный контроллер.

0 ответов

Другие вопросы по тегам