SYSLIB0002:PrincipalPermissionAttribute 已过时

2022-01-05 19:03:33 浏览数 (1)

从 .NET 5 开始,PrincipalPermissionAttribute 构造函数已过时并生成编译时错误 SYSLIB0002。 不能实例化此属性或将其应用于方法。

与其他过时警告不同,无法禁止显示此错误。

工作区

如果要将属性应用于 ASP.NET MVC 操作方法,请执行以下操作:

考虑使用 ASP.NET 的内置授权基础结构。 以下代码演示如何使用 AuthorizeAttribute 属性来为控制器添加批注。 ASP.NET 运行时将在执行操作之前向用户授权。

using Microsoft.AspNetCore.Authorization;

namespace MySampleApp

{

[Authorize(Roles = "Administrator")]

public class AdministrationController : Controller

{

public ActionResult MyAction()

{

// This code won't run unless the current user

// is in the 'Administrator' role.

}

}

}

有关详细信息,请参阅 ASP.NET Core 中基于角色的授权和 ASP.NET Core 中的授权简介。

如果要将属性应用到 Web 应用上下文之外的库代码,请执行以下操作:

通过调用 IPrincipal.IsInRole(String) 方法,在方法开始时手动执行检查。

using System.Threading;

void DoSomething()

{

if (Thread.CurrentPrincipal == null

|| !Thread.CurrentPrincipal.IsInRole("Administrators"))

{

throw new Exception("User is anonymous or isn't an admin.");

}

// Code that should run only when user is an administrator.

}

禁止显示警告

建议尽可能使用可用的解决方法。 但是,如果无法更改代码,可以通过 #pragma 指令或 <NoWarn> 项目设置来禁止显示警告。 如果必须使用过时 API,并且 SYSLIB0XXX 诊断没有显示为错误,则可以在代码或项目文件中取消该警告。

若要禁止显示代码中的警告,请执行以下操作:

// Disable the warning.

#pragma warning disable SYSLIB0001

// Code that uses obsolete API.

//...

// Re-enable the warning.

#pragma warning restore SYSLIB0001

若要禁止显示项目文件中的警告,请执行以下操作:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>

<TargetFramework>net5.0</TargetFramework>

<!-- NoWarn below suppresses SYSLIB0001 project-wide -->

<NoWarn>

0 人点赞