Ошибка Http Asp .Net Core Razor 500 при переходе на страницу входа

#c# #razor-pages #asp.net-core-2.2

#c# #razor-страницы #asp.net-core-2.2

Вопрос:

Я начинаю с razor pages, создал страницу входа и использовал ldap для аутентификации и входа в систему. По-прежнему нет опции выхода. Вот в чем дело, я хочу, чтобы страница входа была страницей по умолчанию, поэтому я удалил каждую страницу по умолчанию из шаблона razor, но ошибка оставила только логин

 Pages 
  Account Folder 
  Login page
  

Проблема в том, что после входа в систему, теперь всякий раз, когда я пытаюсь получить доступ к странице входа, она выдает мне эту ошибку

Ошибка HTTP 500.0 — Сбой загрузки обработчика процесса ANCM Распространенные причины этой проблемы: указанная версия Microsoft.NETCore.Приложение или Microsoft.AspNetCore.Приложение не найдено. Обработчик запросов в процессе, Microsoft.AspNetCore.Server.На IIS не было ссылки в приложении. ANCM не удалось найти dotnet. Шаги по устранению неполадок: Проверьте системный журнал событий на наличие сообщений об ошибках, Включите протоколирование стандартных сообщений процесса приложения, Подключите отладчик к процессу приложения и проверьте Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?LinkID=2028526

Я не смог найти ничего об этой ошибке, возникающей только на одной странице, только о IIS.

Это происходит только на странице входа, я могу нормально обращаться к другим страницам…

Вот код на моей странице входа

 @page
@model GestaoRequisicoes.Pages.LoginModel
@{
    ViewData["Title"] = "Login";
}

<h1>Login</h1>

<p>Autentique-se para iniciar sessão:</p>
<form method="post">

    <div class="container">
        <div class="row">
            <div class="col-md-12">

                <div class="form-group">
                    <div asp-validation-summary="All" class="text-danger"></div>
                    <label for="exampleInputPassword1">Username</label>
                    <input asp-for="loginData.Username" value="username" class="form-control form-control-sm" />
                </div>

                <div class="form-group">
                    <label for="exampleInputPassword1">Password</label>
                    <input asp-for="loginData.Password" value="password" class="form-control form-control-sm" />
                </div>

                <div class="form-group form-check">
                    <input id="txtRememberMe" asp-for="loginData.RememberMe" type="checkbox" class="form-check-input" />
                    <label class="form-check-label" for="txtRememberMe">Remember me</label>
                </div>

                <input type="submit" value="Login" class="btn btn-primary" />

            </div>
        </div>
    </div>

    @Html.AntiForgeryToken()
</form>
  

и файл cs

 public class LoginModel : PageModel
{
    [BindProperty]
    public LoginData loginData { get; set; }

    public void OnGet()
    {            

    }

    public async Task<IActionResult> OnPostAsync()
    {
        if (ModelState.IsValid)
        {                             
            string dominio = "10.35.14.240/OU=Users,OU=PLG,OU=PT,OU=EMEA,DC=sd6,DC=glb,DC=corp,DC=local";
            string adPath = "LDAP://"   dominio;

            LDAPAutenticador aut = new LDAPAutenticador(adPath);
            var isValid = aut.autenticado(dominio, loginData.Username, loginData.Password);

            if (!isValid)
            {
                ModelState.AddModelError("", "username or password is invalid");
                return Page();
            }
            else
            {
                var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme, ClaimTypes.Name, ClaimTypes.Role);
                identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, loginData.Username));
                identity.AddClaim(new Claim(ClaimTypes.Name, loginData.Username));
                var principal = new ClaimsPrincipal(identity);
                await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, new AuthenticationProperties { IsPersistent = loginData.RememberMe });
                return RedirectToPage("Account/Index");
            }                
        }
        else
        {
            ModelState.AddModelError("", "username or password is blank");
            return Page();
        }
    }

    public class LoginData
    {
        [Required]
        [StringLength(8)]
        public string Username { get; set; }

        [Required, DataType(DataType.Password)]
        public string Password { get; set; }

        public bool RememberMe { get; set; }
    }
}
  

и загрузочный файл

  public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(options =>
        {
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        }).AddCookie(options => { options.LoginPath = "/Login"; });

        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });


        services.AddMvc().AddRazorPagesOptions(options => 
        {
            options.Conventions.AuthorizeFolder("/Account");
            options.Conventions.AllowAnonymousToPage("/Login");

        }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();
        app.UseAuthentication();
        app.UseMvc();
    }
}
  

Обновить

Прошло некоторое время, но если кто-нибудь заметит подобную ошибку, просто проверьте средство просмотра событий Windows, и оно выдаст вам сообщение об ошибке. В сообщении было что-то об исключении тайм-аута пула соединений с Entity Framework. Я предполагаю, что Entity Framework просто не удалось подключиться к SQL Server, пока я не обновил базы данных в SQL Server Explorer, вероятно, потому, что я использую экземпляр localdb mssqlserver для тестирования, но это все еще странное поведение и происходит только при первом запуске вашего проекта каждый день