我面临着一个问题,即有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
的网址,当我使用单独的控制器时,这会更长。