c# - Razor Pages 发现和授权
问题描述
我正在使用 ASP.NET Core 3.0 和 Razor Pages 开发一个 Web 应用程序。我想添加一个功能,允许用户按页面名称搜索 - 假设用户搜索“密码”,结果是“更改密码”,这是一个 Razor 页面。
我想页面模型看起来像:
[SearchablePage(Name="Manage Account", Keywords="password,username,change")]
public class ManageAccountModel : PageModel
{
...
}
到目前为止,我设法通过注入IActionDescriptorCollectionProvider
和查找PageActionDescriptor
项目来进行页面发现。这将显示应用程序中的所有页面。
我不确定如何访问每个页面的实际PageModel
类,以便确定自定义搜索属性的值。
我还试图弄清楚用户是否有权查看页面 - 是来自授权属性还是来自 Startup.cs 中配置的授权约定。
任何帮助或在哪里寻找的指针将不胜感激!
谢谢!
更新
我设法IAuthorizationService
从框架文档中找到了一个提供。现在的诀窍是检索剃须刀页面的所有策略。
解决方案
我有以下页面列出了我的 webapp 中的所有路由。我用来诊断端点。作为起点可能有用。我不确定您将如何获得授权信息。
public class RoutesModel : PageModel {
private readonly IActionDescriptorCollectionProvider _actionDescriptorCollectionProvider;
public RoutesModel(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider) {
this._actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
}
public List<RouteInfo> Routes { get; set; }
public void OnGet() {
Routes = _actionDescriptorCollectionProvider.ActionDescriptors.Items
.Select(x => new RouteInfo {
Action = x.RouteValues["Action"],
Controller = x.RouteValues["Controller"],
Name = x.AttributeRouteInfo?.Name,
Template = x.AttributeRouteInfo?.Template,
Constraint = x.ActionConstraints == null ? "" : JsonConvert.SerializeObject(x.ActionConstraints)
})
.OrderBy(r => r.Template)
.ToList();
}
public class RouteInfo {
public string Template { get; set; }
public string Name { get; set; }
public string Controller { get; set; }
public string Action { get; set; }
public string Constraint { get; set; }
}
}
推荐阅读
- objective-c - 在 Objective-C 中使用单例保留循环
- powershell - New-AzureADMSInvitation 仅适用于尚未受邀的用户
- python - 如何在熊猫数据框列上打印给定字符串的出现?
- php - PDF 未在 FPDF 中下载
- python - 如何在诸如 mixin 之类的公共类中捕获所有异常
- c - 编译依赖于外部库 Opus 和 Faac 的 WebAssembly 程序
- ios - IOS:导入笔记的API
- c# - Input.GetKeyDown 在我调用两次时不起作用
- amazon-cloudformation - 使用 AWS CDK 为 AWS API 网关启用 CORS
- mysql - MYSQL 从 3 个不同的字段中抓取 DISTINCT 行