MVC4路由问题。无法自定义网址

时间:2015-09-06 16:34:55

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

以下是我的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中是否可行。

1 个答案:

答案 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中的可选文字字符。