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