ASP.NET Core 2 - Как удалить строительные леса?

ASP.NET Core 2.x включает в себя некоторые готовые маршруты, такие как страница входа, настройки и т. Д. Я работаю над тем, что имеет только кнопки входа OAuth и никаких настроек. Это означает, что я не хочу, чтобы пользователи могли регистрироваться по электронной почте, и мне не нужны страницы настроек.

Я могу удалить ссылку на такие вещи, как страница "Настройки", однако маршруты все еще существуют, и к ним можно получить доступ, введя их. Как отключить эти маршруты, чтобы они были полностью недоступны?

В основном все под /Identity/Account/* Маршрут, кроме страницы входа, не должен быть доступен.

2 ответа

Для отключения определенного маршрута для 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);

То, на что вы ссылаетесь - это интерфейс пользователя по умолчанию. Включается всякий раз, когда вы регистрируете services.AddDefaultIdentity или явно позвонить AddDefaultUI при регистрации через другой IServiceCollection расширения (AddIdentity/AddIdentityCore). Вы не можете выбрать или выбрать то, что будет или не будет включено в пользовательский интерфейс по умолчанию, поэтому, если вы не хотите его часть, то вы не можете использовать его вообще. Поэтому измените services.AddDefaultIdentity линия к services.AddIdentity вместо.

После этого вы можете использовать каркас Identity для включения определенных частей пользовательского интерфейса по умолчанию в ваше приложение. Щелкните правой кнопкой мыши по вашему проекту и выберите Add > New Scaffolded Item..., Затем выберите Identity слева и OK использовать единственный доступный каркас идентификации. В появившемся окне вы можете проверить страницы, которые вы хотите включить, а затем нажать OK снова.

Другие вопросы по тегам