我使用的是asp.net mvc 2和vs 2008.
我试图通过表单授权制作网站。当我试图限制访问某些页面时,我使用的是asp.net管理工具。例如,我创建了规则,拒绝访问整个网站的匿名用户。正如预期的那样,管理工具在根web.config文件中添加了以下部分:
<authorization>
<deny users="?" />
</authorization>
当我在某个子文件夹中执行相同的操作时,例如%ApplicationRoot%/ View / Protected,管理工具,如预期的那样,在所提到的子文件夹中添加web.config文件,其代码如下:
<configuration>
<system.web>
<authorization>
<deny users="UserName" />
</authorization>
</system.web>
theese文件之间的主要区别是root web.config授权部分有一些效果(一般来说,它按计划工作 - 拒绝来自整个网站的所有未经身份验证的用户)。但是子文件夹web.config授权部分根本没有任何效果。 我发现然后添加到根配置文件,代码
<location path="Protected">
<authorization>
<deny users="UserName" />
</authorization>
</location>
大大地完成了工作 - 它按计划拒绝%UserName%访问位于%ApplicationRoot%/ View / Protected Folder中的所有视图。
这个行为与卡西尼和伊斯相似,我试过了。
主要问题是我需要善意的管理工具来完成工作,因此我要求任何有关问题的帮助 - 当web.config位于子文件夹中时,为什么授权部分无效?< BR />
P.S。我试图在子文件夹web.config中的<authorization>
和</authorization>
之间放置错误的代码:
<authorization>
asdfg
</authorization>
没效果。由于某些问题,可能会忽略整个部分?
P.P.S。同一文件中授权部分的代码不正确会导致错误
答案 0 :(得分:6)
您的问题是您的应用程序不是传统的ASP.NET Web窗体应用程序。 你想要做的就是在Web Forms中完美运行,但不能在MVC中运行。
在MVC世界中,当浏览器请求页面/ People / SmartList时,它不一定会从您的项目中显示/People/SmartList.cshtml。实际上,您的项目甚至根本没有/ People /文件夹。将由MVC引擎显示的视图(.cshtml文件)由路由确定。当它访问那些.cshtml文件时,MVC路由引擎不会查看你的web.config文件。现在,您可以看到为什么忽略web.conig文件。
但你仍然可以进行授权。您应该使用[Authorize]
属性而不是使用web.config文件,并将其应用于适当的控制器操作方法,甚至应用于整个控制器类。
[Authorize(Users="UserName")]
public ActionResult ShowRestrictedData()
...