ASP.NET Core 2-如何删除脚手架路线?

时间:2019-01-17 17:34:44

标签: asp.net-core asp.net-mvc-scaffolding

ASP.NET Core 2.x包括一些预制的脚手架路线,例如登录页面,设置等。我正在研究仅具有OAuth登录按钮且没有设置的东西。这意味着我不希望用户能够使用电子邮件进行注册,也不需要任何设置页面。

我可以删除指向“设置”页面之类的链接,但是这些路由仍然存在并且可以通过键入它们进行访问。如何禁用这些路由以使其完全无法访问?

除登录页面外,/Identity/Account/*路由下的所有内容基本上都不可用。

2 个答案:

答案 0 :(得分:2)

您所指的是默认的身份UI。当您通过其他services.AddDefaultIdentity扩展名(AddDefaultUI / IServiceCollection注册时,向AddIdentity注册Identity或显式调用AddIdentityCore时,都将包括该标识符。您不能选择默认UI中将要包含的内容,也可以选择不包含的内容,因此,如果您不想包含其中的一部分,则根本无法使用它。因此,请将services.AddDefaultIdentity行更改为services.AddIdentity

完成后,您可以使用身份支架在应用程序中包括默认UI的某些部分。右键单击您的项目,然后选择Add> New Scaffolded Item...。然后,选择左侧的IdentityOK以使用唯一可用的身份支架。在出现的窗口中,您可以检查要包括的页面,然后再次单击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);