c# - 在asp.net core 2.2 web api中的AuthenticationHandler中获取控制器名称
问题描述
我有一个基本的自定义 AuthenticationHandler 就像这篇文章https://jasonwatmore.com/post/2018/09/08/aspnet-core-21-basic-authentication-tutorial-with-example-api
在Task<AuthenticateResult> HandleAuthenticateAsync()
覆盖中,我需要获取控制器名称。
在启动中注入 IActionContextAccessor 不起作用:
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
ActionContext 属性为空(我认为尚未设置)
HttpContext 可用,所以我应该尝试解析 Context.Request.Path 吗?
提前致谢 !
解决方案
正如我在评论中解释的那样,在调用 Router 中间件之前您不会获得路由数据。
对于您的教程代码,我找到了创建路由器并使其在身份验证中间件之前运行的解决方案。在启动.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseRouter(routeBuilder => {
var template = "{controller=Users}/{action=GetAll}/{id?}";
routeBuilder.MapMiddlewareRoute(template, appBuilder => {
appBuilder.UseAuthentication();
appBuilder.UseMvc();
});
});
//add more middlewares if you want other routes
app.UseAuthentication();
app.UseMvc();
}
获取控制器名称AuthenticationaHandler
(使用 Microsoft.AspNetCore.Routing 参考):
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
var name = Context.GetRouteValue("controller");
//...
}
推荐阅读
- octobercms - 保存模型后获取清除字段值
- telerik - 如何从 Telerik RadGrid 获取单元格值
- javascript - 如何让 jQuery-DataTables 响应?
- json - 流式传输而不截断
- python - 绘制适合图像的放大部分?
- python - Reading two Complete different dataframes from a single csv file
- android - 在 Koin MVP 中提供活动
- hyperledger-fabric - 交易是否作为加密数据提交给 Hyperledger Fabric?
- python - 使用ezdxf 将INSERT 实体从一个dxf 文件复制到另一个dxf 文件?
- django - 用 django 原始 sql 查询填充表单集