ASP.NET MVC - 使用RouteConstraint传递默认路由的参数

时间:2016-06-23 04:16:47

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing route-constraint

我面临着一个问题,即有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是否包含title变量,如果是,则返回true,以便执行/Watch/Index/{title}

现在,当我点击下面的网址

时,它会正常工作
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包含键(标题),但其值始终为null。这是我相信的问题,但我无法识别它。

这样做的全部意思是清理SEO的网址,当我使用单独的控制器时,这会更长。

0 个答案:

没有答案