使用ASP.NET MVC3,如何在区分大小写的路由中使IIS不重定向302?
例如,我在IIS中创建了一个名为“Admin”的应用程序文件夹. javascript(有数百个文件,没有微不足道的变化,然后当新代码生成或写入时,我们必须在所有路由上手动执行大小写?我认为这有点过分)和一些手写链接都指向/ admin / ControllerName /或/ admin / controllername /已经,所以当IIS看到这个时,它会向/ Admin / ControllerName /发出302.显然(我测试确认)只是改变案例阻止了302.
每个图像,javascript包括等,导致IIS的两次点击.
我怎样才能减少流量,只是让IIS继续进行,并且不区分大小写地重新路由我,这样我们就可以停止所有愚蠢的302了.或者这是不可能的,我应该在我们编写的所有代码中永远执行每个潜在的URL吗?或者我只是需要吸吮它并与302一起生活?
解决方法
我猜你正在使用WS-Federation?或者至少使用WSFederationAuthenticationModule和/或SessionAuthenticationModule?这两个模块都会执行重定向以匹配应用程序的大小,因为它在IIS中无论何时无法对您进行身份验证或验证您是否有权获取所请求的资源.我没有看到任何方法阻止它这样做,即使你可以,你可能无法使用/ admin实际访问资源.
这样做的原因是cookie中列出的路径区分大小写,并且由于与WS-Federation相关的所有内容都是通过cookie完成的,因此外壳必须匹配.如果显示您已经过身份验证的Cookie是为/ Admin创建的,那么您尝试访问/ admin,它会认为您未经过身份验证.
一种可能的解决方法是将管理目录设置为IIS中的单独应用程序,并将其配置为不使用FAM或SAM.但是,根据目录的名称,我猜这对你来说不是一个可行的选择,因为你在该目录上失去了身份验证.