5

我在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 ?;
}
}
4

2 回答 2

6

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

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

希望这可以帮助...

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

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

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

尝试这个:

var absoluteUrl = UriHelper.GetAbsoluteUri();
var token = absoluteUrl.Substring(absoluteUrl.IndexOf("=") + 1);
于 2018-11-14T20:37:36.490 回答
4

为了在没有 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;
  }
}
于 2018-11-19T07:53:53.800 回答