5

Blazorにプロジェクトがあります

そしてクライアント側では、ハッシュパラメータを読みたい

私は JavaScript でそれを行う方法を知っています - しかし、私の質問は、Blazor プロジェクトの c# クライアント側でそれを行う方法です

たとえば、http://localhost:5060/#token=12345678という URL があります。

服用方法は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 を指定します。ドキュメントには 1 つの要素しか存在できません。

ドキュメントのベース URL は、document.baseURI を使用してスクリプトからクエリできます。"

これを試して:

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 に答える