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

时间:2018-11-14 19:05:18

标签: c# blazor

我在Blazor有一个项目

在客户端,我想读取哈希参数

我知道如何使用JavaScript进行操作-但我的问题是,如何在Blazor项目的c#客户端中进行操作

例如,我有一个URL http://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 ?;
}
}

2 个答案:

答案 0 :(得分:5)

如果可以使用JavaScript进行操作,请使用JavaScript Interop: 1.定义一个提取令牌的JavaScript函数。 2.定义一个调用函数的C#方法

但是最好使用本身使用JavaScript的Blazor来做到这一点... 您需要查看在Microsoft.AspNetCore.Blazor.Services.UriHelperBase和/或中定义的方法 Microsoft.AspNetCore.Blazor.Browser.Services.BrowserUriHelper

希望这对您有帮助...

注意:<base>元素是在位于以下位置的Index.Html文件中设置的 wwwroot文件夹。

  

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

     

可以使用以下命令从脚本中查询文档的基本URL   document.baseURI。”

尝试一下:

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

答案 1 :(得分:2)

要在没有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;
  }
}