以下是我的RouteConfig.cs。
我想创建一个像这样的网址
http://localhost:22723/Home*Index
所以我有如下所示的Routeconfig.cs。我删除了所有默认设置。
routes.MapRoute(
name: "Default3",
url: "{controller}*{action}*{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
当我输入如下所示的网址时,它无效。
http://localhost:22723/Home*Index
请说明为什么上述网址无效以及如何使其正常工作
这种URL在MVC4中是否可行。
答案 0 :(得分:0)
正如J Santosh指出的那样,在URL中使用*
是可能的,但您必须禁用请求验证才能使其正常工作(不推荐)。
如果你想使用另一个角色(除/
之外),你需要以不同的方式建立你的路线方案,因为Route
类不理解除了/
之外如何制作任何其他文字字符可选的。下面是使用-
文字字符的示例,但在URL中有效的任何其他字符都将以相同的方式工作。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// This must be first to prevent the home page from
// being generated as /Home-Index
routes.MapRoute(
name: "Home",
url: "",
defaults: new { controller = "Home", action = "Index" }
);
routes.MapRoute(
name: "ThreePlaceholders",
url: "{controller}-{action}-{id}"
);
routes.MapRoute(
name: "TwoPlaceholders",
url: "{controller}-{action}"
);
routes.MapRoute(
name: "OnePlaceholder",
url: "{controller}",
defaults: new { action = "Index" }
);
}
}
诀窍是您需要制作一套完整的网址格式并使每个占位符 必需 ,以确保每条路线仅在一个特定情况下匹配。您可以通过不提供默认值来制作占位符。
路由框架匹配从第一个注册路由到最后一个路由的URL模式,第一个匹配总是获胜。因此,在这种情况下,您需要多个模式来处理URL中的可选文字字符。