将虚假页面名称路由到控制器

时间:2013-06-24 04:36:46

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

对于我网站上的某些网页,例如登录页面,我宁愿用户看到login.htm,而不是/Home/Login

我尝试过创建这样的路线:

routes.MapRoute(
    name: "LoginScreen",
    url: "login.htm",
    defaults: new { controller = "Home", action = "Login" }
    );

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

当我尝试访问/login.htm时,我得到了404。

2 个答案:

答案 0 :(得分:0)

此处还有其他答案可以将静态页面路由到控制器(例如url with extension not getting handled by routing),但我会问你为什么要这样做?

用户通常不关心他们正在访问的网址,通过这样做,您实际上正在摆脱mvc的一个好处,即无扩展路由

<强>已更新

查看IIS中的网址重写(http://www.iis.net/learn/extensions/url-rewrite-module/iis-url-rewriting-and-aspnet-routing

您将要么必须捕获.htm(l)页面的所有请求,并且有一些逻辑来确定发送它们的位置,或者您将为每个.htm(l)页面设置单独的重写规则您想要映射到控制器操作

答案 1 :(得分:0)

只要LoginScreen以上没有其他路线且控制器和动作名称正确,那么这应该可以正常工作。

如果您有其他路由映射,请将其注释掉并再次尝试。也许另一条路线正在干扰它。