繁体   English   中英

Blazor WASM(托管)重定向到手动输入的 URL

[英]Blazor WASM (hosted) redirected on manually entered URL

我有一个 Blazor WASM(托管)应用程序。 一切正常。 如果我手动输入 URL 到页面的情况除外。

例如。 我有一个页面“RsetPw2.razor”。
代码如下:

@page "/Auth/respw2"
@using Microsoft.AspNetCore.WebUtilities
@using Microsoft.Extensions.Primitives;
@layout AccountLayout
@inject IAuthService AuthService
@inject ISnackbar Snackbar
@inject NavigationManager navMgr


@if (usTok == null || usEm == null)
{
    <MudContainer>
        <MudCard style="margin-top:60px; width:80%;" Elevation="5" Class="pa-auto ml-auto mr-auto">
            <MudCardHeader>
                <MudText Typo="Typo.h5">Reset your Password (step two)</MudText>
            </MudCardHeader>
            <MudCardContent>
                <MudAlert Severity="Severity.Error" Variant="Variant.Filled">This page can not be called without a valid token and a valid user email address!</MudAlert>
            </MudCardContent>
            <MudCardActions>
                <MudButton ButtonType="ButtonType.Submit" Disabled="true" Variant="Variant.Filled" Color="Color.Primary" Class="ml-auto">Register</MudButton>
            </MudCardActions>
        </MudCard>
    </MudContainer>
}
else
{
    <EditForm Model="@user" OnValidSubmit="@HandleReset">
        <DataAnnotationsValidator />
        <MudCard style="margin-top:60px; width:80%;" Elevation="5" Class="pa-auto ml-auto mr-auto">
            <MudCardHeader>
                <MudText Typo="Typo.h5">Reset your Password</MudText>
            </MudCardHeader>
            <MudCardContent>
                <MudTextField Label="Email address" Disabled="true" HelperText="Max. 8 characters" @bind-Value="@usEm" For="@(() => user.UserEmail)" />
                <MudTextField Label="Reset token" Disabled="true" Class="mt-3" HelperText="the token you'vet got by mail'" @bind-Value="@usTok" For="@(() => user.ResetToken)" />
                <MudTextField Label="New Password" HelperText="Choose a strong password" Class="mt-3" @bind-Value="@user.NewPassword" For="@(() => user.NewPassword)" InputType="InputType.Password" />
                <MudTextField Label="repeat new Password" HelperText="Repeat the password" Class="mt-3" @bind-Value="@user.ConfirmPassword" For="@(() => user.ConfirmPassword)" InputType="InputType.Password" />
            </MudCardContent>
            <MudCardActions>
                <MudButton ButtonType="ButtonType.Submit" Variant="Variant.Filled" Color="Color.Primary" Class="ml-auto">Reset Password</MudButton>
            </MudCardActions>
        </MudCard>

    </EditForm>

}

@code {
private UserPwResetModel user = new UserPwResetModel();
private StringValues tok = String.Empty;
private StringValues em = String.Empty;
private string usTok { get; set; } = String.Empty;
private string usEm { get; set; } = String.Empty;

protected override void OnInitialized()
{
    var uri = navMgr.ToAbsoluteUri(navMgr.Uri);
    if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("token", out tok))
    {
        usTok = Convert.ToString(tok);
    }
    if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("um", out em))
    {
        usEm = Convert.ToString(em);
    }
}

private async Task HandleReset()
{
    user.ResetToken = usTok;
    user.UserEmail = usEm;
    var res = await AuthService.ResetPassword(user);
    if (!res.Success)
    {
        snackMessage(res.Message, Severity.Error, Defaults.Classes.Position.BottomRight);
    }
    else
    {
        snackMessage(res.Message, Severity.Success, Defaults.Classes.Position.BottomRight);
        var Count = 3;
        var tmr = new System.Threading.Timer(new TimerCallback(_ =>
        {
            if (Count > 0)
            {
                Count--;                    
            }
            if(Count == 0)
            {
                Snackbar.Clear();
                navMgr.NavigateTo("/Auth/login");
            }
        }), null, 1000, 1000);
    }
}

// show a snackbar message
private void snackMessage(string message, MudBlazor.Severity type, string position)
{
    Snackbar.Clear();
    Snackbar.Configuration.PositionClass = position;
    Snackbar.Add(message, type);
}

}

当我现在输入 URL https://localhost:7076/Auth/respw2时,我被自动重定向到https://localhost:7076

如果我使用NavigationManager.NavigateTo到应用程序中的 URL ,则页面可以轻松运行。

我真的不知道重定向发生的位置和原因。

我希望有人有一个想法...

PS:我忘了提:我已经用空白的 Blazor WASM(托管)应用程序进行了测试。 在那里我可以手动将 URL 输入到现有页面。 所以这一定是我的应用程序有问题:-(

所以,经过长时间的测试。 我找不到这个问题的原因!

我通过执行以下操作解决了它:

  1. 创建一个新的空 Blazor WASM(asp.net 核心托管)项目
  2. 删除所有组件、服务和控制器
  3. 从非工作项目中复制页面、组件、服务和 controller 并将它们粘贴到新的空白项目中。

路由通过手动输入 url 来工作。 很奇怪...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM