C# Blazor на стороне клиента читает параметры хэша из URL

У меня есть проект в Blazor

И на стороне клиента, я хочу прочитать параметры хеша

Я знаю, как сделать это в JavaScript - но мой вопрос заключается в том, как сделать это на стороне клиента C# в проекте Blazor

Например, у меня есть URL-адрес http://localhost:5060/

Как взять 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 ?;
}
}

3 ответа

Решение

Если вы можете сделать это в JavaScript, используйте JavaScript Interop: 1. Определите функцию JavaScript, которая извлекает токен. 2. Определите метод C#, который вызывает функцию

Но было бы еще лучше сделать это с Blazor, который сам использует JavaScript... Вам нужно взглянуть на методы, определенные в Microsoft.AspNetCore.Blazor.Services.UriHelperBase и / или Microsoft.AspNetCore.Blazor.Browser.Services.BrowserUriHelper

Надеюсь это поможет...

Обратите внимание <base> элемент задается в файле Index.Html, расположенном в папке wwwroot.

" HTML <base> Элемент указывает базовый URL-адрес, который будет использоваться для всех относительных URL-адресов, содержащихся в документе. В документе может быть только один элемент.

Базовый URL документа может быть запрошен из скрипта с использованием document.baseURI."

Попробуй это:

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

Для чтения параметров хэша в C# Blazor без JavaScript или других клиентских решений мне нужно изменить функцию, как показано в коде ниже:

@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;
  }
}

Я пытался получить хэш-закладку из URL-адреса в компоненте Blazor. 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) : ""; 
}
Другие вопросы по тегам