ASP.NET Core 2.x包括一些预制的脚手架路线,例如登录页面,设置等。我正在研究仅具有OAuth登录按钮且没有设置的东西。这意味着我不希望用户能够使用电子邮件进行注册,也不需要任何设置页面。
我可以删除指向“设置”页面之类的链接,但是这些路由仍然存在并且可以通过键入它们进行访问。如何禁用这些路由以使其完全无法访问?>
除登录页面外,/Identity/Account/*
路由下的所有内容基本上都不可用。
答案 0 :(得分:2)
您所指的是默认的身份UI。当您通过其他services.AddDefaultIdentity
扩展名(AddDefaultUI
/ IServiceCollection
注册时,向AddIdentity
注册Identity或显式调用AddIdentityCore
时,都将包括该标识符。您不能选择默认UI中将要包含的内容,也可以选择不包含的内容,因此,如果您不想包含其中的一部分,则根本无法使用它。因此,请将services.AddDefaultIdentity
行更改为services.AddIdentity
。
完成后,您可以使用身份支架在应用程序中包括默认UI的某些部分。右键单击您的项目,然后选择Add
> New Scaffolded Item...
。然后,选择左侧的Identity
和OK
以使用唯一可用的身份支架。在出现的窗口中,您可以检查要包括的页面,然后再次单击OK
。
答案 1 :(得分:1)
要为Razor Page
禁用特定路由,可以尝试IAsyncPageFilter
。
public class DisableIdentityAsyncPageFilter : IAsyncPageFilter
{
public DisableIdentityAsyncPageFilter()
{
}
public async Task OnPageHandlerSelectionAsync(
PageHandlerSelectedContext context)
{
await Task.CompletedTask;
}
public async Task OnPageHandlerExecutionAsync(
PageHandlerExecutingContext context,
PageHandlerExecutionDelegate next)
{
if (context.HttpContext.Request.Path.StartsWithSegments("/Identity") &&
!context.HttpContext.Request.Path.StartsWithSegments("/Identity/Account/Login"))
{
context.Result = new StatusCodeResult(404);
}
else
{
await next.Invoke();
}
}
}
然后在Startup.cs
services.AddMvc(options => {
options.Filters.Add(typeof(DisableIdentityAsyncPageFilter));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);