0

我面临一个问题,有 2 个默认 asp.net mvc 路由(通过自定义约束应用)。我想要做的是,根据路由字典中是否提供参数来加载不同的视图。以下是我的两条路线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包含 title 变量,如果是,则返回 true 以便/Watch/Index/{title}执行 my 。

现在当我点击以下网址时它可以工作

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包含键(标题),但其值始终为空。这就是我认为的问题所在,但我无法识别它。

这样做的整个想法是清理我的网址,SEO当我使用单独的控制器时,这些网址要长得多。

4

0 回答 0