我在MVC网站上有表单身份验证,默认路由设置为将用户发送到/ home / index。 Home / index通过Web.config位置部分从登录要求中排除。如果我输入http://Example/home/index,我会按预期进入主页,但如果我只是http://Example,我会被重定向到登录页面。
如果我关闭身份验证并执行http://Example,默认路由工作正常,我就会被发送到主页。
为什么身份验证不遵守默认路由?谢谢!
答案 0 :(得分:6)
您不应该使用<location>
中的web.config
元素来处理ASP.NET MVC应用程序中的授权,因为它可能会与您的路由冲突。这用于标准的WebForms应用程序,但在MVC中被认为是不好的做法。
处理此问题的推荐方法是使用[AuthorizeAttribute]
修饰控制器/操作。因此,请删除web.config中的所有location
元素并进行装饰。
答案 1 :(得分:0)
对我来说,问题是MachineKey
。如果正在执行该操作,则需要解密/加密cookie (例如:Web场)。因为应用程序无法解密cookie,即使它来回传递,应用程序的行为就像cookie甚至不存在一样。将此设置添加到web.config为我修复了它:
<machineKey compatibilityMode="Framework20SP2" validationKey="some_hard_coded_long_key" decryptionKey="another_hard_coded_long_key" validation="SHA1" />
有关machinekey的更多信息,请参阅此文章。