Melden Sie sich mit httpcontext anC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Melden Sie sich mit httpcontext an

Post by Anonymous »

Ich versuche, ein einfaches festcodiertes Login im Blazor -Projekt mit httpcontext.Signinasync < /code> zu implementieren, wie in den angegebenen Code gezeigt. httpcontext ist null! Nachdem ich die möglichen Ursachen dazu nachgeschlagen hatte, stellte ich fest, dass die Blazer Server -Seite den HTTPContext nicht sendet, wenn der Render interactiveServer ist. Wenn ich jedoch die Anmeldepage Serverstatic erstelle, funktioniert die Interaktion (Ereignisse) nicht. Wenn ich versuche, onParametersset () Ereignis (siehe unten in Code) hinzuzufügen, lädt es immer wieder neu, sodass uns offensichtlich keinen Wert für httpcontext
App.razor Code (relevante Teile):
erhalten

Code: Select all




....






...




@code {
[CascadingParameter]
private HttpContext HttpContext { get; set; } = default!;
private IComponentRenderMode? PageRenderMode =>
HttpContext.AcceptsInteractiveRouting() ? InteractiveServer : null;
//     private IComponentRenderMode? PageRenderMode =>
//         HttpContext.Request.Path.StartsWithSegments("/Account") ? null : InteractiveServer;
}
< /code>
login.razor Code (relevante Teile): < /p>
@page "/Account/login"
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Mvc.Rendering
@using Syncfusion.Blazor.Buttons
@using System.Diagnostics
@using System
@using System.IO
@using Microsoft.AspNetCore.Authentication
@using System.Security.Claims
@using Microsoft.AspNetCore.Authentication.Cookies
@inject IWebHostEnvironment Environment
@inject NavigationManager NavigationManager
@inject AuthenticationStateProvider AuthenticationStateProvider

Login


...




Username[/b][b]        
Password[/b]

Login

Cancel



@code
{
[CascadingParameter]
private HttpContext HttpContext { get; set; } = default!;

LoginModel LoginReq { get; set; } = new LoginModel();

protected override void OnInitialized()
{
}

// protected override void OnParametersSet()
// {
//     if (HttpContext is null)
//     {
//         // If this code runs, we're currently rendering in interactive mode, so there is no HttpContext.
//         // The identity pages need to set cookies, so they require an HttpContext.  To achieve this we
//         // must transition back from interactive mode to a server-rendered page.
//         NavigationManager.Refresh(forceReload: true);
//     }
// }

public async void Submit()
{
if (LoginReq.UserName == "username" && LoginReq.Password == "12345")
{
var claims = new List
{
new Claim(ClaimTypes.Name, LoginReq.UserName)
};

var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);

await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity));

HttpContext.Response.Redirect("/autofillpage");
}
else
NavigationManager.NavigateTo("Account/login", true);
}

public void Cancel()
{
NavigationManager.NavigateTo("Account/login", true);
}
}

public class LoginModel
{
[Required(ErrorMessage = "Username is Required")]
[RegularExpression(@"^[a-zA-Z0-9]+$", ErrorMessage = "Input Invalid")]
public string UserName { get; set; }

[Required(ErrorMessage = "Password is Required")]
public string Password { get; set; }
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post