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) : "";
}