【问题标题】:Routing a fake page name to a controller将虚假页面名称路由到控制器
【发布时间】:2013-06-24 04:36:45
【问题描述】:

对于我网站上的某些页面,例如登录页面,我希望用户看到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。

【问题讨论】:

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


    【解决方案1】:

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

    用户通常不关心他们正在访问的 url,通过这样做,您实际上正在远离 mvc 的好处之一,即无扩展路由

    更新

    看看 IIS 中的 Url Rewriting (http://www.iis.net/learn/extensions/url-rewrite-module/iis-url-rewriting-and-aspnet-routing)

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

    【讨论】:

    • 出于审美原因我们想做它;即我们更喜欢在我们的一些 Uri 中看到 .htm。
    • 我已经用几个可能的想法更新了答案。就个人而言,我会说这是一种不太理想的方法,而且您会给自己带来维护方面的麻烦,但绝对可以这样做
    【解决方案2】:

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

    如果您有其他路由映射,请将它们注释掉并重试。可能是另一条路线干扰了它。

    【讨论】:

      猜你喜欢
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多