C # Blazor на стороне клиента читает параметры хэша из URL - PullRequest
0 голосов
/ 14 ноября 2018

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

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

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

Например, у меня есть 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 голосов
/ 19 ноября 2018

Для чтения хеш-параметров в 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;
  }
}
0 голосов
/ 14 ноября 2018

Если вы можете сделать это в 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...