使用 ASP.NET MVC3,如何让 IIS 在区分大小写的路由上不重定向 302?

使用 ASP.NET MVC3,如何让 IIS 在区分大小写的路由上不重定向 302?

使用 ASP.NET MVC3,如何让 IIS 在区分大小写的路由上不重定向 302?

例如,我在 IIS 中在我的站点下创建一个名为“Admin”的应用程序文件夹。javascript(有数百个文件,没有简单的更改,然后当生成或编写新代码时,我们必须手动在所有路由上强制大小写?我认为这是过度的)和一些手写链接都指向/admin/ControllerName//admin/controllername/已经,因此当 IIS 看到这种情况时,它会向发出 302。/Admin/ControllerName/显然(我测试确认)只需更改大小写即可防止 302。

每个图像、javascript 包含等都会导致 IIS 两次命中。

我如何才能减少流量,让 IIS 继续不区分大小写地重新路由,这样我们就可以停止所有愚蠢的 302 错误。或者这是不可能的,我应该在我们编写的所有代码中永远强制每个潜在的 URL 区分大小写?或者我只需要忍受并忍受 302 错误?

答案1

我猜你正在使用 WS-Federation?或者至少使用 WSFederationAuthenticationModule 和/或 SessionAuthenticationModule?这两个模块都会执行重定向以匹配 IIS 中的应用程序的大小写,因为它们无法对你进行身份验证或验证你是否有权获取请求的资源。我看不出有什么办法可以阻止它这样做,即使你能,你也可能无法通过使用 来实际访问资源/admin

原因是 cookies 中列出的路径区分大小写,而与 WS-Federation 相关的一切都是通过 cookies 完成的,因此大小写必须匹配。如果为 创建了显示您已通过身份验证的 cookie,/Admin然后您尝试访问/admin,它会认为您未通过身份验证。

一种可能的解决方法是将管理目录设置为 IIS 中的单独应用程序,并将其配置为不使用 FAM 或 SAM。但是,根据目录的名称,我猜这对您来说不是一个可行的选择,因为您会失去对该目录的身份验证。

答案2

嗯,我以为是 IIS曾是不区分大小写。

您确定这里没有发生任何您可以禁用的 URL 重写吗?

干杯

相关内容