WebPermission 类

控制访问 HTTP Internet 资源的权限。

**命名空间:**System.Net
**程序集:**System(在 system.dll 中)

语法

声明
<SerializableAttribute> _
Public NotInheritable Class WebPermission
    Inherits CodeAccessPermission
    Implements IUnrestrictedPermission
用法
Dim instance As WebPermission
[SerializableAttribute] 
public sealed class WebPermission : CodeAccessPermission, IUnrestrictedPermission
[SerializableAttribute] 
public ref class WebPermission sealed : public CodeAccessPermission, IUnrestrictedPermission
/** @attribute SerializableAttribute() */ 
public final class WebPermission extends CodeAccessPermission implements IUnrestrictedPermission
SerializableAttribute 
public final class WebPermission extends CodeAccessPermission implements IUnrestrictedPermission

备注

WebPermission 提供一组方法和属性来控制对 Internet 资源的访问。您可以根据创建 WebPermission 时设置的 PermissionState 使用 WebPermission 提供对资源的受限制和无限制的访问。

使用以下一组参数集通过调用其构造函数创建 WebPermission 实例:

  • 无参数。默认的 PermissionStateNone

  • PermissionState。指定 Unrestricted 允许在目标类中使用任何 URI,或指定 None 只允许访问通过使用 AddPermission 方法指定的 URI。

  • 一个 NetworkAccess 值和一个 URI 字符串。指定的 URI 具有 NetworkAccess 值授予的权限。

  • 一个 NetworkAccess 说明符和 URI 正则表达式。

ConnectListAcceptList 保存有已对其授予访问权限的 URI。若要向两个列表中的任何一个添加 URI,请使用 AddPermission。如果将 Accept 作为 NetworkAccess 参数传递,则 URI 将被添加到 AcceptListWebPermission 将允许到 URI 与 AcceptList 匹配的目标类的连接。

警告

若要 Deny 访问 Internet 资源,您必须 Deny 访问该资源的所有可能的路径。更好的方法是仅允许访问特定资源。有关该主题的更多信息,请参见 使用 Deny 方法 主题。

提示

您仅需要使用资源的规范路径 Deny 访问。没有必要使用路径的所有语法变化形式。

提示

在与提供给 WebPermission(NetworkAccess,Regex) 构造函数的正则表达式参数进行比较之前,用户名和默认端口信息从 Uri 中剥离。如果正则表达式包含用户信息或默认端口号,则所有传入的 Uri 将无法匹配该正则表达式。

示例

下面的示例演示如何使用 Regex 创建 WebPermission 的新实例。将其他主机添加到 WebPermission 的“连接”和“接受”列表。最后,将“连接”和“接受”列表显示到控制台。

' Create a Regex that accepts all the URLs contianing the host fragment www.contoso.com.
Dim myRegex As New Regex("http://www\.contoso\.com/.*")
  
' Create a WebPermission that gives permission to all the hosts containing same host fragment.
Dim myWebPermission As New WebPermission(NetworkAccess.Connect, myRegex)
' Add connect privileges for a www.adventure-works.com.
myWebPermission.AddPermission(NetworkAccess.Connect, "https://www.adventure-works.com")
' Add accept privileges for www.alpineskihouse.com.
myWebPermission.AddPermission(NetworkAccess.Accept, "http://www.alpineskihouse.com/")
' Check whether all callers higher in the call stack have been granted the permission.
myWebPermission.Demand()
  
' Get all the URIs with Connect permission.
Dim myConnectEnum As IEnumerator = myWebPermission.ConnectList
Console.WriteLine(ControlChars.NewLine + "The 'URIs' with 'Connect' permission are :" + ControlChars.NewLine)
While myConnectEnum.MoveNext()
  Console.WriteLine((ControlChars.Tab + myConnectEnum.Current.ToString()))
End While 

' Get all the URIs with Accept permission.      
Dim myAcceptEnum As IEnumerator = myWebPermission.AcceptList
Console.WriteLine(ControlChars.NewLine + ControlChars.NewLine + "The 'URIs' with 'Accept' permission is :" + ControlChars.NewLine)
  
While myAcceptEnum.MoveNext()
  Console.WriteLine((ControlChars.Tab + myAcceptEnum.Current))
End While
//  Create a Regex that accepts all URLs containing the host fragment www.contoso.com.
Regex myRegex = new Regex(@"http://www\.contoso\.com/.*");

// Create a WebPermission that gives permissions to all the hosts containing the same host fragment.
WebPermission myWebPermission = new WebPermission(NetworkAccess.Connect,myRegex);

//Add connect privileges for a www.adventure-works.com.
myWebPermission.AddPermission(NetworkAccess.Connect,"https://www.adventure-works.com");

//Add accept privileges for www.alpineskihouse.com.
myWebPermission.AddPermission(NetworkAccess.Accept, "http://www.alpineskihouse.com/");

// Check whether all callers higher in the call stack have been granted the permission.
myWebPermission.Demand();

// Get all the URIs with Connect permission.
IEnumerator myConnectEnum = myWebPermission.ConnectList;
Console.WriteLine("\nThe 'URIs' with 'Connect' permission are :\n");
while (myConnectEnum.MoveNext())
{Console.WriteLine("\t" + myConnectEnum.Current);}
 
// Get all the URIs with Accept permission.      
IEnumerator myAcceptEnum = myWebPermission.AcceptList;
Console.WriteLine("\n\nThe 'URIs' with 'Accept' permission is :\n");
  
while (myAcceptEnum.MoveNext())
  {Console.WriteLine("\t" + myAcceptEnum.Current);}
//  Create a Regex that accepts all URLs containing the host fragment www.contoso.com.
Regex^ myRegex = gcnew Regex( "http://www\\.contoso\\.com/.*" );

// Create a WebPermission that gives permissions to all the hosts containing the same host fragment.
WebPermission^ myWebPermission = gcnew WebPermission( NetworkAccess::Connect,myRegex );

//Add connect privileges for a www.adventure-works.com.
myWebPermission->AddPermission( NetworkAccess::Connect, "https://www.adventure-works.com" );

//Add accept privileges for www.alpineskihouse.com.
myWebPermission->AddPermission( NetworkAccess::Accept, "http://www.alpineskihouse.com/" );

// Check whether all callers higher in the call stack have been granted the permission.
myWebPermission->Demand();

// Get all the URIs with Connect permission.
IEnumerator^ myConnectEnum = myWebPermission->ConnectList;
Console::WriteLine( "\nThe 'URIs' with 'Connect' permission are :\n" );
while ( myConnectEnum->MoveNext() )
{
   Console::WriteLine( "\t{0}", myConnectEnum->Current );
}

// Get all the URIs with Accept permission.   
IEnumerator^ myAcceptEnum = myWebPermission->AcceptList;
Console::WriteLine( "\n\nThe 'URIs' with 'Accept' permission is :\n" );

while ( myAcceptEnum->MoveNext() )
{
   Console::WriteLine( "\t{0}", myAcceptEnum->Current );
}
// Create a Regex that accepts all URLs containing the host fragment
// www.contoso.com.
Regex myRegex = new Regex("http://www\\.contoso\\.com/.*");
// Create a WebPermission that gives permissions to all the hosts 
// containing the same host fragment.
WebPermission myWebPermission = new WebPermission(
    NetworkAccess.Connect, myRegex);
//Add connect privileges for a www.adventure-works.com.
myWebPermission.AddPermission(NetworkAccess.Connect,
    "https://www.adventure-works.com");
//Add accept privileges for www.alpineskihouse.com.
myWebPermission.AddPermission(NetworkAccess.Accept,
    "http://www.alpineskihouse.com/");
// Check whether all callers higher in the call stack have been
// granted the permission.
myWebPermission.Demand();
// Get all the URIs with Connect permission.
IEnumerator myConnectEnum = myWebPermission.get_ConnectList();
Console.WriteLine("\nThe 'URIs' with 'Connect' permission are :\n");
while (myConnectEnum.MoveNext()) {
    Console.WriteLine("\t" + myConnectEnum.get_Current());
}
// Get all the URIs with Accept permission.      
IEnumerator myAcceptEnum = myWebPermission.get_AcceptList();
Console.WriteLine("\n\nThe 'URIs' with 'Accept' permission is :\n");

while (myAcceptEnum.MoveNext()) {
    Console.WriteLine("\t" + myAcceptEnum.get_Current());

继承层次结构

System.Object
   System.Security.CodeAccessPermission
    System.Net.WebPermission

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

WebPermission 成员
System.Net 命名空间
CodeAccessPermission
PermissionState
NetworkAccess 枚举