我正在使用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的回答,
我能够按照以下步骤解决它:
- 使用nuget软件包管理器安装
Microsoft.AspNetCore.WebUtilities
- 将
@inject NavigationManager NavManager
添加到blazor component
@page "/authentication/{code?}"
@inject NavigationManager NavManager
<PageTitle>App | Authentication</PageTitle>
- 并最终在
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);
}
}