提问人:Sascha Heimann 提问时间:8/14/2022 最后编辑:zx485Sascha Heimann 更新时间:8/18/2022 访问量:332
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
如果我使用 导航到应用程序中的 URL,该页面将轻松运行。NavigationManager.NavigateTo
我真的不知道重定向发生在哪里以及为什么发生。
我希望有人有个主意......
PS:我忘了提:我已经用一个空白的Blazor WASM(托管)应用程序测试过了。在那里,我可以手动输入现有页面的 URL。所以这一定是我的应用程序有问题:-(
答:
0赞
Sascha Heimann
8/18/2022
#1
所以,经过长时间的测试。我发现这个问题没有原因!
我通过执行以下操作解决了它:
- 创建一个空的 Blazor WASM(asp.net 核心托管)项目
- 删除所有组件、服务和控制器
- 从非工作项目中复制页面、组件、服务和控制器,并将它们粘贴到新的空白项目中。
路由通过手动输入 url 来工作。很奇怪...
评论