IIS下ASP.NET Web Forms应用URL末尾斜杠及路由跳转问题咨询
ASP.NET Web Forms虚拟目录URL行为差异与重定向解决方案
一、两个应用URL表现不同的原因
- EMR(无URL路由):未启用路由时,IIS默认对虚拟目录的无斜杠请求,会自动触发目录模块处理逻辑,补全末尾斜杠后返回响应,再配合表单认证的跳转流程,最终表现为自动加斜杠并返回预期页面。
- EMRSSO(启用URL路由):路由模块
UrlRoutingModule会优先接管所有请求,你配置的routes.MapPageRoute("Home", String.Empty, ...)仅匹配emrsso/(带斜杠)的根路径,但不带斜杠的emrsso请求没有对应的路由规则匹配。同时路由模块会阻止IIS默认的斜杠补全行为,导致请求无法被正确解析,既不会自动加斜杠,也无法跳转到预期页面。
二、实现重定向的解决方案
方法1:调整路由规则
修改路由注册代码,添加适配无斜杠请求的规则,或者直接通过路由触发重定向:
// 保留原路由 routes.MapPageRoute("Home", String.Empty, ConfigurationManager.AppSettings["HomePage"]); // 添加匹配无斜杠根请求的路由,直接指向配置的首页 routes.MapPageRoute("HomeRoot", "", ConfigurationManager.AppSettings["HomePage"]);
如果需要强制重定向到带斜杠的路径,可以新增一个中间页面处理:
routes.MapPageRoute("RedirectRoot", "", "~/RedirectRoot.aspx");
然后在RedirectRoot.aspx的Page_Load中写重定向逻辑:
protected void Page_Load(object sender, EventArgs e) { // 重定向到带斜杠的根路径 Response.Redirect("~/", true); // 或者直接跳转到配置的首页 // Response.Redirect(ConfigurationManager.AppSettings["HomePage"], true); }
方法2:IIS URL重写规则
在EMRSSO应用的web.config中添加重写规则,直接将无斜杠的请求重定向到目标路径:
<system.webServer> <rewrite> <rules> <!-- 规则1:给EMRSSO添加末尾斜杠 --> <rule name="AddSlashToEMRSSO" stopProcessing="true"> <match url="^emrsso$" /> <action type="Redirect" url="emrsso/" redirectType="Permanent" /> </rule> <!-- 规则2:直接重定向到配置的首页 --> <rule name="RedirectToEMRSSOHome" stopProcessing="true"> <match url="^emrsso$" /> <action type="Redirect" url="emrsso/<%$ AppSettings:HomePage %>" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer>
注:需要确保IIS已安装URL重写模块。
方法3:Global.asax事件处理
在Global.asax的Application_BeginRequest事件中检测请求路径,手动触发重定向:
protected void Application_BeginRequest(object sender, EventArgs e) { string requestPath = Request.Path.ToLower(); if (requestPath == "/emrsso") { // 重定向到带斜杠的路径 Response.Redirect("/emrsso/", true); // 或者直接跳转到配置的首页 // string homePage = ConfigurationManager.AppSettings["HomePage"]; // Response.Redirect($"/emrsso/{homePage}", true); } }
内容的提问来源于stack exchange,提问作者Sup Ravi Kumar
相关产品推荐
相关产品推荐

