我正在构建一个混合了公共(public)页面和成员(member)专享页面的网站。登录系统可以正常工作。
但是我想启动一个封闭的、仅限邀请的预览,并暂时要求访问者登录才能进行除欢迎页面之外的所有操作。
目前我在某些操作方法上有 [Authorize]
属性。我也可以向其他操作方法添加额外的属性,但这感觉有点老套,而且以后当我想恢复为具有更多开放内容时更难正确删除它们。
那么,我怎样才能有效地添加站点范围的授权要求呢?回想一下,我希望单个 /Home/Index
路由也保持公开,以便我邀请的人可以在激活他们的邀请之前阅读一些信息。
最佳答案
我认为在 web.config
中执行此操作文件是最好的,因为它是临时的,不需要您添加任何 C#
代码或依赖角色/名称等。
在您的 web.config
中执行以下操作
<configuration>
<!-- system.web is the only already in your web.config
don't add this, just add the authorization element
to the existing system.web element -->
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
<!-- the login path -->
<location path="Login/Index">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<!-- welcome page -->
<location path="Home/Index">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
<!-- static files (images, css, js etc.) folder -->
<location path="Content">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
</configuration>
第一个<authorization>
元素会将对您的应用程序的访问限制为仅经过身份验证/登录的用户。后续<location>
元素在特定路径(登录页面、欢迎屏幕和静态文件)上放置异常。
确保您确认 path
根据您的应用程序,每个位置的属性都是正确的。
有关 location
的更多详细信息元素可以在 MSDN 'location element' 找到.
关于.net - ASP.NET MVC - 临时要求除一页之外的整个站点授权的简便方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4729197/