以下是我的观点的目录布局的简单概述:
项目
问题
我正在使用表单身份验证来拒绝所有未经身份验证的用户访问,这样可以正常工作。但是,我希望能够向所有人授予访问RSS视图的权限(这样他们就可以通过谷歌阅读器和东西订阅)
我了解您可以通过将以下页面添加到web.config
来授予对页面的访问权限 <location path="TOURPAGE.aspx">
<system.web>
<authorization>
<allow users="*" />
<allow users="?" />
</authorization>
</system.web>
但是,我如何使用动态制作的网址执行此操作,例如:
Issues/RSS/chrisj
修改
我认为已经修复了一些答案,但是:
似乎至少在我的情况下,你仍然需要身份验证cookie才能看到该页面。只要你有cookie,就可以注销并查看它。
这对我不利,我需要将页面完全公开,因为它是一个RSS提要。
答案 0 :(得分:3)
这实际上比我想象的要简单得多。似乎.net非常聪明,我尝试了以下内容:
<location path="Issues/RSS">
<system.web>
<authorization>
<allow users="*" />
<allow users="?" />
</authorization>
</system.web>
它有效:)
答案 1 :(得分:3)
忘掉&lt; location&gt;&lt; allow /&gt;&lt; deny /&gt;东西......听起来你需要在行动中使用[授权]属性。
查看这些页面以获取更多信息: http://www.asp.net/learn/mvc/tutorial-17-cs.aspx http://www.pnpguidance.net/post/ASPNETMVCFrameworkPreview4HandleErrorAuthorizeOutputCacheActionFilterAttributes.aspx
此外,该属性也可以在控制器级别应用,因此您不必将其放在每个单独的操作上。
答案 2 :(得分:1)
<location path="/Issues/RSS/">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
编辑:顺便说一下,这是因为.NET假设URL转到了一个目录,上面的这个位置标记说“在'Issues / RSS'目录中的任何内容都是安全的:”
答案 3 :(得分:0)
这可能无法按预期工作。
似乎至少在我的情况下,你仍然需要身份验证cookie才能看到该页面。只要你有cookie,就可以注销并查看它。
这对我没有好处,我需要页面完全公开,因为它是一个RSS提要。
答案 4 :(得分:0)
我同意Charlino的说法,[授权]标签可能会解决您的问题。
如果您对RSS和页面使用单个控制器操作(并且只是根据某个参数呈现不同的ActionResult),您可以检查用户是否使用HttpContext.Current.User.Identity.IsAuthenticated
进行了身份验证,并在其中使用控制器动作决定是否继续&amp;允许访问。