Blazor WASM 根据查询字符串授权属性

Blazor WASM authorize attribute based on query string

@attribute [Authorize(Roles = "Admin")]
@attribute [Authorize(Roles = NavigationManager.QueryString("level"))]

我在我的页面级别添加了这段代码,第一个授权属性工作正常,因为它只是一个常量值“Admin”,而不是第二个授权属性。

我正在尝试根据查询字符串授予访问权限,但是此代码 NavigationManager.QueryString("level") 会出现此错误 “非静态字段、方法或 属性 'member' 需要对象引用”

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs0120?f1url=%3FappId%3Droslyn%26k%3Dk(CS0120)

有办法解决这个问题吗?

简答:你不能这样做。属性参数 needs to be a compile time constant.

长答案:不要这样做。使用查询字符串检查授权本质上是不安全的。

如果您有复杂的授权,请查看基于策略的授权。 This is a good explainer in general. Check out this 更具体的 Blazor WASM 示例