小编Pep*_*ger的帖子

在服务器端 Blazor 中使用 SignInManager

SignInManager没有的话可以使用吗HTTPContext?我正在制作 Blazor 服务器端应用程序,我需要让最终用户使用 的PasswordSignInAsync()方法登录SignInManager

如果有其他方法可以用cookies或其他东西来做到这一点,我也会采用,只要它们是“干净”的方法。

如果我还能得到有关如何配置解决Startup.cs方案的解释,那就完美了。

c# asp.net asp.net-core blazor blazor-server-side

6
推荐指数
1
解决办法
1万
查看次数

Add-Migration 命令只提示“ScriptHalted”

我正在尝试使用本教程学习如何使用 Razor 页面制作 App.Net Core 应用程序:https ://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/model?view = aspnetcore-3.0&tabs=visual-studio

在我制作了 Movie 模型并成功搭建了它之后,我尝试进行数据库的初始迁移。

但是,每次我使用命令时Add-Migration,它只会提示ScriptHalted,即使使用详细选项时,与Update-Database.

我尝试了其他命令Enable-Migration,它们似乎有效,但不是我需要的两个。

有什么我想念的吗?

在我看来,我完美地遵循了教程,并试图在这里找到答案,但我没有想出任何解决方案。

c# powershell visual-studio nuget asp.net-core

5
推荐指数
1
解决办法
8466
查看次数

验证在 Blazor 服务器端不起作用

我定义了一个LogInForm.cs这样的表格:

using System.ComponentModel.DataAnnotations;

namespace PollingInstitute.Data.LogIn
{
    public class LogInForm
    {
        [Required]
        [DataType(DataType.EmailAddress, ErrorMessage = "This field require a mail adress (example : abc@xyz.com)")]
        public string Mail { get; set; }

        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

和这样的登录屏幕LogIn.razor

@page "/login"
@using PollingInstitute.Data.LogIn
@inject LogInService _LogInService

<h3>Login</h3>

<EditForm Model="@logInForm" OnValidSubmit="@TryLogIn">

    <div>
        <label>Mail Adress : </label><InputText @bind-Value="@logInForm.Mail"></InputText>
        <ValidationMessage For="@(()=>logInForm.Mail)"></ValidationMessage>
    </div>

    <div>
        <label>Password : </label><InputText @bind-Value="@logInForm.Password"></InputText>
        <ValidationMessage For="@(()=>logInForm.Password)"></ValidationMessage>
    </div>

    <div>

        @if (!IsDisabled)
        {
            <button type="submit">Submit</button> …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-core blazor-server-side

5
推荐指数
1
解决办法
2774
查看次数

StateHasChanged() 重新渲染组件两次

我正在做Blazor服务器端的项目,我想使一个按钮,desactivate点击后,却没有使用disabled的属性<button>。代码非常简单:

@functions {

    LogInForm logInForm = new LogInForm();
    bool IsDisabled;
    SignInResult result;

    protected override void OnInitialized()
    {
        IsDisabled = false;
    }

    async Task TryLogIn()
    {
        IsDisabled = true;
        StateHasChanged();
        result =  await _LogInService.TryLogIn(logInForm);
        Console.WriteLine("Logging status : " + (result.Succeeded ? "Sucess" : "Failure"));
        IsDisabled = false;
        StateHasChanged();
    }

}
Run Code Online (Sandbox Code Playgroud)

出于奇怪的原因,第一个StateHasChanged没有触发,但第二个确实重新呈现页面。通过进入调试模式并进入StateHasChanged()方法,它可以很容易地进行测试。第二次调用时,它会在进入方法后停止在 HTML 代码上,但不是第一次。

为什么这样 ?

注意:我不是在寻找任何使用Task.DelayTask.Run(...)仅使用的解决方法,因为它在这些线程和 UI 刷新线程之间存在竞争条件,因此它不是一个可靠的解决方案。我正在寻找有关StateHasChanged()行为或解决方法的答案,方法是使用诸如PropertyChanged或之类的事件EventCallback并将按钮作为子组件。

编辑:经过一些测试,似乎StateHasChanged()只有 …

c# asp.net razor blazor blazor-server-side

4
推荐指数
2
解决办法
7470
查看次数

AuthorizeRouteView Authorizing 和 NotAuthorized 参数设置

每次非登录用户尝试访问页面时,我都想使用标签中的NotAuthorized属性<AuthorizeRouteView>重定向到登录页面。

然而,它需要一个RenderFragment<AuthentificationState>类型化的参数。我应该设置什么来设置这个参数来呈现登录页面?

编辑:代码非常简单。我使用了身份存储在应用程序中的 Blazor 服务器端项目模板,只需添加RedirectToLogin.razor如下内容:

@inject NavigationManager NavigationManager
@code { 
    protected override void OnAfterRender()
    {
        NavigationManager.NavigateTo("counter"); //for an unknown reason, the "Identity/Account/Login" redirect doesn't work.
    }
}
Run Code Online (Sandbox Code Playgroud)

并修改了App.razor

<CascadingAuthenticationState>
    <Router AppAssembly="@typeof(Program).Assembly">
        <Found Context="routeData">
            <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
                <NotAuthorized>
                    @if(true) { } //Used for breakpoint.
                    <RedirectToLogin />
                </NotAuthorized>
                <Authorizing>
                    @if(true) { } //Used for breakpoint.
                </Authorizing>
            </AuthorizeRouteView>
        </Found>
        <NotFound>
            <LayoutView Layout="@typeof(MainLayout)">
                <p>Sorry, there's nothing at this address.</p>
            </LayoutView>
        </NotFound>
    </Router>
</CascadingAuthenticationState> …
Run Code Online (Sandbox Code Playgroud)

c# asp.net blazor blazor-server-side

3
推荐指数
3
解决办法
4879
查看次数