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

jco*_*and 6 iis-7 asp.net-mvc case-insensitive

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

例如,我在 IIS 中名为“Admin”的站点下创建了一个应用程序文件夹。javascript(有数百个文件,没有微不足道的更改,然后当新代码生成或编写时,我们必须在所有路由上手动强制执行?我认为这太过分了)和一些手写链接都指向/admin/ControllerName//admin/controllername/已经指向,因此当 IIS 看到这一点时,它会向/Admin/ControllerName/. 显然(我测试过以确认)只是改变案例可以防止 302。

每个图像、javascript 包含等都会对 IIS 造成两次点击。

我怎样才能减少流量,让 IIS 继续前进,不区分大小写地重新路由我,这样我们就可以停止所有愚蠢的 302。或者这是不可能的,我应该在我们编写的所有代码中永远强制执行每个潜在的 URL?或者我只需要把它吸起来并与 302 一起生活?

小智 9

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

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

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