Страница Razor не отображаетсяC#

Место общения программистов C#
Ответить
Anonymous
 Страница Razor не отображается

Сообщение Anonymous »

Я создаю простую страницу входа (страница входа -> страница панели управления с аутентификацией через файлы cookie). Я использую веб-сборку Blazor. Я использую ChatGPT, чтобы направлять и объяснять любые ошибки, с которыми я сталкиваюсь.
После изучения некоторых руководств я пришел к следующему выводу. Проблема сейчас заключается в том, что URL-адрес меняется только после нажатия кнопки входа в систему. Я перепробовал все, что нашел в сети, и все еще застрял в этой проблеме. Простите, если это может быть пост для новичка, поскольку я только сегодня начал его изучать.
Program.cs:
using BCrypt.Net;
using HrisClient.Components;
using HrisClient.Data;
using HrisClient.Services;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Components;
using Microsoft.EntityFrameworkCore;
using System.Security.Claims;
using LoginRequest = HrisClient.Models.LoginRequest;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();

builder.Services.AddScoped(sp =>
{
var nav = sp.GetRequiredService();
return new HttpClient
{
BaseAddress = new Uri(nav.BaseUri)
};
});

builder.Services.AddDbContext(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));

builder.Services.AddHttpContextAccessor();
builder.Services.AddScoped();

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/login";
});

builder.Services.AddAuthorization();
builder.Services.AddCascadingAuthenticationState();

var app = builder.Build();

app.UseStaticFiles();

app.UseRouting(); // ✅ CRITICAL FIX

app.UseAuthentication();
app.UseAuthorization();

app.UseAntiforgery();

app.MapRazorComponents()
.AddInteractiveServerRenderMode();

app.MapPost("/auth/login", async (
HttpContext http,
AppDbContext db,
LoginRequest request) =>
{
var user = await db.Users
.FirstOrDefaultAsync(x => x.UserUsername == request.Username);

if (user == null)
return Results.Unauthorized();

if (!BCrypt.Net.BCrypt.Verify(request.Password, user.UserPassword))
return Results.Unauthorized();

var claims = new List
{
new Claim(ClaimTypes.Name, user.UserUsername),
new Claim("UserPslId", user.UserPslId?.ToString() ?? "")
};

var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var principal = new ClaimsPrincipal(identity);

await http.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
principal);

return Results.Ok();
});

app.Run();

Login.cs:
@page "/login"
@layout LoginLayout

@using HrisClient.Services

@inject AuthService Auth
@inject NavigationManager Nav
@inject HttpClient Http

@rendermode InteractiveServer

HRIS Login
LOGIN PAGE LOADED



HRIS Login
Sign in to continue





Login

@if (!string.IsNullOrEmpty(error))
{
@error
}




@error

@code {
string username = "";
string password = "";
string? error;

async Task LoginUser()
{
error = null;

var response = await Http.PostAsJsonAsync("/auth/login", new
{
Username = username,
Password = password
});

if (response.IsSuccessStatusCode)
{
Nav.NavigateTo("/dashboard", forceLoad: false);
}
else
{
error = "Invalid username or password";
}
}
}

Dashboard.cs:
@page "/dashboard"

@using HrisClient.Services

@attribute [Microsoft.AspNetCore.Authorization.Authorize]
@inject AuthService Auth
@inject NavigationManager Nav

DASHBOARD LOADED
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»