作为测试,我创建了一个空的c#web应用程序。 然后我在同一个文件夹中创建了5个空页面(直接在webApplication文件夹下): WebForm1.aspx的 WebForm2.aspx WebForm3.aspx WebForm4.aspx login.aspx的
之后我尝试限制访问其中一些页面。WebForm1,WebForm2应该被所有人(匿名用户)访问 WebForm3必须仅由经过身份验证的用户访问。 WebForm4必须只能由管理员访问。
所以我修改了web.config文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
<authentication>
<forms defaultUrl="WebForm1.aspx" loginUrl="login.aspx"></forms>
</authentication>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
<location path="WebForm3.aspx">
<system.web>
<authentication></authentication>
<authorization>
<allow users="*"/>
<deny users="?"/>
</authorization>
</system.web>
</location>
<location path="WebForm4.aspx">
<system.web>
<authentication></authentication>
<authorization>
<allow roles="admins"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
</configuration>
现在所有用户都可以访问WebForm1和WebForm2(公共页面) 但尝试浏览WebForm3.aspx或WebForm4.aspx会显示错误,并且不会首先重定向到登录页面以供管理员使用。
Server Error in '/' Application.
Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
Source Error:
Line 18: <location path="WebForm3.aspx">
Line 19: <system.web>
Line 20: <authentication></authentication>
Line 21: <authorization>
Line 22: <allow users="*"/>
Source File: E:\testApp\testApp\web.config Line: 20
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34280
如何控制访问所有页面并将它们放在同一个文件夹中?真正的应用程序结构与此类似。
答案 0 :(得分:0)
根据<authentication>
文档。
此元素只能在计算机,站点或应用程序级别声明。任何在子目录或页面级别的配置文件中声明它的尝试都将导致解析器错误消息。
从<location>
代码中删除这些代码会让它再次运行。
<location path="WebForm3.aspx">
<system.web>
<authorization>
<allow users="*"/>
<deny users="?"/>
</authorization>
</system.web>
</location>
<location path="WebForm4.aspx">
<system.web>
<authorization>
<allow roles="admins"/>
<deny users="*"/>
</authorization>
</system.web>
</location>