asp.net - Blazor Webassembly 身份验证非常慢

标签 asp.net authentication blazor blazor-webassembly

您好,我创建了一个 blazor webassembly 项目,它使用 API 来获取数据和授权。身份验证工作正常,问题是应用程序非常慢。例如,通过 bazor 应用程序登录过程最多可能需要 5 秒,而如果我通过 API 调用登录操作,过程会非常快。我究竟做错了什么?这是用于身份验证的 blazor 代码。我没有包括 API 代码,因为身份验证是快速通过 postman

Login.razor

@page "/login"
@inject IAuthService AuthService
@inject NavigationManager NavigationManager
@using System.Net.Http
@inject HttpClient Http

<h1>Register</h1>

<div class="card">
    <div class="card-body">
        <h5 class="card-title">Please enter your details</h5>
        <EditForm Model="UserLoginViewModel" OnValidSubmit="HandleRegistration">
            <DataAnnotationsValidator />
            <ValidationSummary />

            <div class="form-group">
                <label for="email">Email address</label>
                <InputText Id="email" class="form-control" @bind-Value="UserLoginViewModel.Email" />
                <ValidationMessage For="@(() => UserLoginViewModel.Email)" />
            </div>
            <div class="form-group">
                <label for="password">Password</label>
                <InputText Id="password" type="password" class="form-control" @bind-Value="UserLoginViewModel.Password" />
                <ValidationMessage For="@(() => UserLoginViewModel.Password)" />
            </div>
            <button type="submit" class="btn btn-primary">Submit</button>
        </EditForm>
    </div>
</div>

<h2 value="@test" innderHtml="@test" text="@test"></h2>

@code {
    string test = "wow";
    private UserLoginViewModel UserLoginViewModel = new UserLoginViewModel();



    private async Task HandleRegistration()
    {

        var result = await AuthService.Login(UserLoginViewModel);

        if (result.Successful)
        {
            NavigationManager.NavigateTo("/");
        }
    }

}

Authservice -> Login-function

public async Task<LoginResult> Login(UserLoginViewModel model)
        {

            var loginAsJson = JsonSerializer.Serialize(model);
            var response = await _httpClient.PostAsync("Account/Login", new StringContent(loginAsJson, Encoding.UTF8, "application/json"));
            LoginResult loginResult = JsonSerializer.Deserialize<LoginResult>(await response.Content.ReadAsStringAsync(), new JsonSerializerOptions { PropertyNameCaseInsensitive = true });


            if (!response.IsSuccessStatusCode)
                return loginResult;


            await _localStorage.SetItemAsync("authToken", loginResult.Token);
            ((ApiAuthenticationStateProvider)_authenticationStateProvider).MarkUserAsAuthenticated(model.Email);
            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", loginResult.Token);


            return loginResult;

        }

谢谢!

最佳答案

这可能不是你的问题,但我最近遇到了同样的事情。我在 Blazor WebAssembly 中的身份验证时间从不到一秒跳到了几秒。我追踪到拒绝 x 帧。

认为这只会影响使用 ASP.NET Identity 进行身份验证的托管 Blazor WebAssembly 应用程序。换句话说,任何在设置托管项目时检查个人帐户的人。

一旦我设置了 NWebSpec 并添加了这一行,它就变得非常慢:

app.UseXfo(xfo => xfo.Deny());

我通过切换到同源解决了这个问题:

app.UseXfo(xfo => xfo.SameOrigin());

把它留在这里以防其他人遇到这个问题。

关于asp.net - Blazor Webassembly 身份验证非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64087065/

相关文章:

c# - 获取 ML NET 模型 zip 文件流时 Blazor 出现错误

asp.net-core - Blazor - 更改 DI 服务的属性后, Razor 页面不会更新

c# - 通过 abcpdf 创建单选按钮

c# - 使用itextsharp xmlworker将html转pdf并竖写文字

c# - 如何在未经身份验证的情况下在网站上投票一次

authentication - 通过 SSL/TLS 的 PLAIN 身份验证

c# Linq 从字典中的列表中过滤掉记录

security - CouchDB:如何设置/获取用户的密码哈希?

linux - 为什么我无法登录 Debian VM 上的代码服务器?

c# - 如何从父组件中的事件更新子组件属性