asp.net核心检查中间件的路由属性
问题描述:
我试图构建一些ASP.Net核心中间件。asp.net核心检查中间件的路由属性
它需要查看当前路线是否标记为[授权]。
如:
public async Task Invoke(HttpContext context)
{
if(context.Request.Path.Value.StartsWith("/api"))
{
// check if route is marked as [Authorize]
// and then do some logic
}
await _next.Invoke(context);
}
有谁知道这到底是怎么实现,或者如果它甚至有可能?
如果不是,那么什么是一种很好的替代方法?
答
只是自我回答关闭的问题。
似乎不可能做到这一点,因为现在还处于初期阶段。
答
不知道到底要达到什么,这是一个有点棘手回答,但我建议你看看控制器过滤器:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters
我放在一起的例子:
启动。 CS
public void ConfigureServices(IServiceCollection services)
{
services
.AddMvc()
.AddMvcOptions(options => options.Filters.Insert(0, new CustomFilter()));
}
CustomFilter.cs
public class CustomFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
if(context.HttpContext.Request.Path.Value.StartsWith("/api"))
{
var controllerInfo = context.ActionDescriptor as ControllerActionDescriptor;
var hasAuthorizeAttr = controllerInfo.ControllerTypeInfo.CustomAttributes.Any(_ => _.AttributeType == typeof(AuthorizeAttribute));
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
// NOP
}
}
+0
谢谢。正试图读取中间件中的路由数据。看起来可能不可能 –
现在就知道选择哪条路线还为时过早 – Nkosi
想知道这件事。找不到任何明确的答案 –