2010-10-12 64 views
1

我在我的MVC站点上有表单身份验证,并且默认路由设置为将用户发送到/ home/index。主页/索引通过Web.config位置部分从登录要求中排除。如果我输入http://Example/home/index,我会按预期转到主页,但如果我只是执行http://Example,我会重定向到登录页面。MVC上的表单身份验证总是重定向到登录

如果我关闭身份验证并执行http://Example,默认路由工作正常,并且我被发送到主页。

为什么身份验证不尊重默认路由?谢谢!

回答

6

您不应该在web.config中使用<location>元素来处理ASP.NET MVC应用程序中的授权,因为它可能会与您的路由发生冲突。这用于标准WebForms应用程序,但在MVC中被认为是不好的做法。

处理此问题的推荐方法是用[AuthorizeAttribute]装饰您的控制器/操作。所以摆脱web.config中的所有location元素并进行装饰。

+0

是的,这似乎是一个可行的解决方案,但除非我错过了一些东西,这似乎很乏味。有没有办法锁定一切,并提供排除,而不是必须装饰每一个控制器的行动?也许在基地控制器? – 2010-10-12 17:01:38

+0

将您的控制器组织成功能。 'PublicController','AdminController',你得到了点,然后只修饰控制器。你也可以使用一个基础控制器。通过这种方式,所有属性将应用于此控制器上的所有操作。 – 2010-10-12 17:03:12

+0

好的,很酷。谢谢! – 2010-10-12 17:38:10

0

对我来说,问题是MachineKey。如果您正在这样做(例如:网络农场),则需要解密/加密Cookie 。由于该应用程序无法解密该cookie,即使它来回传递,该应用程序的行为就像该cookie甚至没有。增加此设置的web.config固定对我来说:

<machineKey compatibilityMode="Framework20SP2" validationKey="some_hard_coded_long_key" decryptionKey="another_hard_coded_long_key" validation="SHA1" /> 

请参阅本文更多的machinekey

相关问题