带有php风格url参数的Blazor(?parameter=)



我正在使用Envato的身份验证API 为其构建web应用程序

基本上,当用户使用Envato登录时,Envato会将他们重定向到

myapplink.com?code=1234-qwerty-login-code

在我的应用程序端,我应该使用这个代码参数向API发送请求,以获取该用户的访问令牌。

我是Blazor(服务器(的新手,我知道的唯一方法是通过myapplink.com/login/parameter访问Blazor url参数。我尝试使用php风格的参数(例如myapplink.com/login/?parameter=value(,但似乎无法识别。

在我的剃须刀组件中,我有

Authentication.razor

@page "/authentication/{code?}"
<PageTitle>APP | Authentication</PageTitle>
<div>Some html to render the component</div>

组件基础有点像

Authentication.razor.cs

public partial class Authentication
{
[Parameter]
public string? Code { get; set; }

private async Task Authenticate()
{
}
}

我可以使用访问参数

myapplink.com/authentication/code-123-qwerty

我的问题:如何使用PHP风格的url参数(myapplink.com/login/?cose=value(访问参数

您需要解析Razor组件中的查询字符串。路线指令必须是

@page "/authentication"

OnInitialized方法中,您必须从传递给页面的查询字符串中获取值。

检查https://chrissainty.com/working-with-query-strings-in-blazor/以获取详细信息。

如果使用.NET 6,则可以使用[SupplyParameterFromQuery]属性

它看起来像这样:

[SupplyParameterFromQuery]
public string Code { get; set; }

基于Farzan Hajian的回答,

我能够按照以下步骤解决它:

  1. 使用nuget软件包管理器安装Microsoft.AspNetCore.WebUtilities
  2. @inject NavigationManager NavManager添加到blazor component
@page "/authentication/{code?}"
@inject NavigationManager NavManager
<PageTitle>App | Authentication</PageTitle>
  1. 并最终在OnInitialized中获得code参数
[Parameter]
public string? Code { get; set; }
protected override void OnInitialized()
{
var uri = NavManager.ToAbsoluteUri(NavManager.Uri);
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("code", out var _code))
{
Code = Convert.ToString(_code);
}
}

相关内容

  • 没有找到相关文章

最新更新