C#Blazor客户端从url读取哈希参数



我在Blazor 有一个项目

在客户端,我想读取散列参数

我知道如何在JavaScript中完成它,但我的问题是如何在Blazor项目的c#客户端中完成它

例如,我有一个URLhttp://localhost:5060/#token=12345678

如何服用token

我在index.cshtml 中的代码

@page "/"
@inject Microsoft.AspNetCore.Blazor.Services.IUriHelper UriHelper
<h1>Hello, world!</h1>
url is @Url
@functions {
protected override void OnInit() {
    Url = GetUrl();
}
public string Url { get; set; }
public string GetUrl() {
    return ?;
}
}

如果您可以在JavaScript中完成,那么请使用JavaScriptInterop:1.定义一个提取令牌的JavaScript函数。2.定义一个调用函数的C#方法

但最好使用Blazor,它本身使用JavaScript。。。您需要查看Microsoft.AspNetCore.Blazor.Services.UriHelperBase和/或中定义的方法Microsoft.AspNetCore.Blazor.Browser.Services.BrowserUriHelper

希望这能帮助。。。

注意:<base>元素是在位于wwwroot文件夹。

"HTML <base>元素指定要用于所有文档中包含的相对URL。只能有一个元素。

可以使用从脚本中查询文档的基本URLdocument.baseURI.">

试试这个:

var absoluteUrl = UriHelper.GetAbsoluteUri();
var token = absoluteUrl.Substring(absoluteUrl.IndexOf("=") + 1);

要在没有JavaScript或其他客户端解决方案的情况下读取C#Blazor中的哈希参数,我需要更改函数,如下面的代码:

@functions {
  private string url = string.Empty;
  protected override void OnInit() {
    string url = UriHelper.GetAbsoluteUri();
    string[] parameters = url.Replace(UriHelper.GetBaseUri(), "").Replace("#", "").Split('&');
    string token = string.Empty;
    foreach (string prm in parameters) {
      if (prm.IndexOf("token=") >= 0) {
        token = prm.Replace("token=", "");
      }
    }
    UriHelper.OnLocationChanged += OnLocationChanged;
  }
  private void OnLocationChanged(object sender, string newUriAbsolute) {
    url = newUriAbsolute;
  }
  public void Dispose() {
    UriHelper.OnLocationChanged -= OnLocationChanged;
  }
}

我试图从Blazor组件中的url中检索哈希书签。UriHelper不可用。我不得不使用NavigationManager:

@inject NavigationManager _navigationManager;
.....
......
@code {
...
protected override async Task OnInitializedAsync()
{
        var uri = _navigationManager.Uri;
        int si = uri.IndexOf("#model=");
        var modelFile = si > 0 ? uri.Substring(si + 7) : ""; 
}

相关内容

  • 没有找到相关文章