gpt4 book ai didi

ASP.NET web.config 授权设置在子文件夹中被忽略

转载 作者:行者123 更新时间:2023-12-04 11:55:55 25 4
gpt4 key购买 nike

我正在使用 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>

这些文件之间的主要区别在于 root web.config 授权部分有一些影响(一般来说,它按计划工作 - 拒绝来自整个网站的所有未经身份验证的用户)。但是子文件夹 web.config 授权部分根本不起作用。
我发现,然后添加到根配置文件,以下代码

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

完成这项工作 - 按照计划,它拒绝 %UserName% 访问位于 %ApplicationRoot%/View/Protected 文件夹中的所有 View 。
这种行为与 cassini 和 iis 相似,我都试过。

主要问题是我需要一种管理工具来完成这项工作,所以我在寻求有关问题的任何帮助 - 为什么当 web.config 位于子文件夹中时授权部分不起作用?

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

  <authorization>
asdfg
</authorization>

没有效果。由于某些问题,整个部分可能被忽略了?

P.P.S.同一文件中授权部分的错误代码导致错误

最佳答案

您的问题是您的应用程序不是经典的 ASP.NET Web 窗体应用程序。
您正在尝试做的事情在 Web 窗体中可以完美运行,但在 MVC 中却不能。

在 MVC 世界中,当浏览器请求页面/People/SmartList 时,它不一定会显示您项目中的/People/SmartList.cshtml。事实上,您的项目甚至根本没有/People/文件夹。 MVC 引擎显示的 View (.cshtml 文件)由路由决定。当 MVC 路由引擎访问那些 .cshtml 文件时,它根本不会查看您的 web.config 文件。现在,您可以看到为什么您的 web.conig 文件被忽略了。

但是您仍然可以进行授权。您应该使用 [Authorize] 而不是使用 web.config 文件属性并将其应用于适当的 Controller 操作方法,甚至应用于整个 Controller 类。

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

关于ASP.NET web.config 授权设置在子文件夹中被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com