我已将我的应用程序部署到运行IIS6的服务器上,使用的方法是将路由更改为:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}.mvc/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
在IIS中为.mvc扩展添加处理程序。这在大多数情况下工作正常,直到我将[Authorize]属性添加到HomeController类。
这最终会在应用程序中尝试将用户重定向到登录页面,这是我所期望的,但登录页面URL显示为http://server/virtualdir/Account/LogOn?ReturnUrl=%2fvirtualdir%2fDefault.aspx
这导致了一个问题,因为没有.mvc扩展名被添加到URL的帐户控制器部分。
答案 0 :(得分:1)
通过更改web.config中的以下内容解决了该问题:
<authentication mode="Forms">
<forms loginUrl="~/Account.mvc/LogOn" timeout="2880" />
</authentication>
答案 1 :(得分:0)
不直接回答您的问题,但根据我的经验,使用新的路由功能部署应用程序就像使用IIS6并添加通配符映射到aspnet_isapi.dll一样。然后,您可以使用您想要的任何URL,并且在您将来更改为较新版本时,没有人会注意到。
是的,从理论上讲,静态文件处理在这方面效率较低,但是你需要真正的大量流量来注意任何事情。如果你真的获得了大量流量,你仍然可以甚至将所有静态文件移动到另一个域/子域(甚至是CDN),如stackoverflow.com does。它仍然可以指向同一台服务器,您只需为此子域站点使用不同的IIS设置。但是用e。 G。每天只有几千名访客,你甚至不必考虑它。