【发布时间】:2020-09-16 17:20:52
【问题描述】:
是否有一种干净的方法可以完全阻止访问安装 .NET Identity 时创建的 /Areas/Identity/ 文件夹中的所有页面?我希望在startup.cs 能做点什么。
我尝试创建一个继承自 ActionFilter 的过滤器:
public class PreventAccessToIdentityFolderFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
var request = context.HttpContext.Request;
if (request.Path.HasValue && request.Path.Value.ToLower().StartsWith("/identity"))
{
context.HttpContext.Response.Redirect("/");
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
//throw new NotImplementedException();
}
}
然后在 MVC 和 Razor Pages 中注册它(因为新的 Identity UI 使用 Razor Pages):
services.AddRazorPages()
.AddMvcOptions(o => {
o.Filters.Add(new PreventAccessToIdentityFolderFilter());
});
var mvcBuilder = services.AddControllersWithViews(o => {
var policy = new Microsoft.AspNetCore.Authorization.AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
o.Filters.Add(new Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter(policy));
o.Filters.Add(new PreventAccessToIdentityFolderFilter());
});
过滤器对所有 MVC 操作运行,但不对任何 Identity Razor 页面运行。
必须有一种简单的方法来完全禁用对/Identity 区域/剃刀页面的访问?
【问题讨论】:
标签: c# asp.net-mvc asp.net-identity