在子文件夹忽略ASP.NET的web.config授权设置(ASP.NET web.config a

2019-09-24 04:47发布

我使用asp.net的MVC 2和VS 2008。

我试图让网站与形式的授权。 当我试图限制访问某些网页,我使用asp.net管理工具。 在那里,我创建规则,例如,拒绝访问anonimous用户整个网站。 管理工具,如预期,增加了在根web.config文件中找到以下部分:

 <authorization>
   <deny users="?" />
  </authorization>

当我做同样的事情在一些子文件夹,如例%ApplicationRoot%/查看/保护,管理工具,如预期也增加了web.config文件中提到的子文件夹中,用下面的代码:

 <configuration>
<system.web>      
    <authorization>
        <deny users="UserName" />
    </authorization>
</system.web>

theese文件之间总理的区别是根web.config授权部分有一定的效果(通常来说,它的工作按计划 - 拒绝所有未经授权的用户整个网站)。 但是,子文件夹中的web.config授权部分没有任何效果可言。 我发现,然后添加到根配置文件,下面的代码

 <location path="Protected">
  <authorization>
    <deny users="UserName" />
   </authorization>
 </location>

做的工作很大 - 它,按照计划,否认%USERNAME%的存取权限的所有视图,位于%ApplicationRoot%/浏览/文件夹受保护。
这behavoir是simmilar与卡西尼和IIS,我都尝试。

主要的问题是,我需要一种管理工具做的工作,所以我要求有问题的任何帮助 - 为什么当web.config文件位于子文件夹不核准部作品?

PS我试图放置不正确的代码之间<authorization></authorization>在子文件夹中的web.config:

  <authorization>
    asdfg
   </authorization>

没有效果。 也许整个一节是由于忽略一些问题?

PPS不正确的代码列于同一文件中的授权部分的导致错误

Answer 1:

你的问题是,您的应用程序是不是一个经典的ASP.NET Web窗体应用程序。 你正在试图做的会在Web表单完美地工作,但不是在MVC。

在MVC世界,当浏览器请求页面/人/ SmartList的它并不一定是它会从你的项目中所示的/People/SmartList.cshtml。 事实上,你的项目甚至不能有/人/文件夹的。 这将通过MVC发动机被示出的视图(.cshtml文件)由路由确定。 这MVC路由引擎不看都在你的web.config文件中,当访问这些.cshtml文件。 现在,你可以看到,为什么你web.conig文件将被忽略。

但你还是能够做到的授权。 而不是使用web.config文件中的你应该使用[Authorize]属性,并将其应用到适当的控制器的操作方法,甚至将整个控制器类。

[Authorize(Users="UserName")]
public ActionResult ShowRestrictedData()
    ...


文章来源: ASP.NET web.config authorization settings ignored in subfolders