Показанный здесь код работает в серверном проекте ASP.NET Core 8.0 Blazor, но не работает в веб-приложении Blazor, созданном с «Режимом интерактивной визуализации: сервер» и «Местоположение интерактивности: глобальное» (приложение не запускается). с выбранным базовым адресом, который должен быть https://localhost:7122/Identity/Account/Login?ReturnUrl=%2F ). Я прочитал эту статью о документах Microsoft, но надеюсь, что мне не придется идти по этому пути и что есть более простое решение, поскольку все мои проекты выполняются только на стороне сервера.
program.cs
builder.Services
.AddScoped(sp => new HttpClient
{
BaseAddress = new Uri("https://localhost:7122/")
});
@Хенк Холтерман Я обновил вопрос. rendermode InteractiveServer приложение работает нормально, но базовый адрес больше не установлен, как в другом серверном приложении Blazor в том же решении
Сколько program.cs
файлов в вашем решении?
@Henk Holterman В решении есть два полностью разделенных проекта с program.cs: один — это веб-приложение Blazor, а другой — SSR, но они вообще не пересекаются с какими-либо ссылками, а просто используют некоторые общие библиотеки и компоненты.
Как сказано в документе , для рендеринга на стороне клиента (CSR), который включает в себя компоненты Interactive WebAssembly и компоненты Auto, которые приняли CSR, вызовы выполняются с помощью предварительно настроенного HttpClient, зарегистрированного в файле программы клиентского проекта (BlazorApp.Client). ):
builder.Services.AddScoped(sp =>
new HttpClient
{
BaseAddress = new Uri(builder.Configuration["FrontendUrl"] ?? "https://localhost:5002")
});
Поэтому, если вы используете рендеринг на стороне сервера (в настоящее время вы используете SSR), который включает в себя предварительно обработанные и интерактивные серверные компоненты, предварительно обработанные компоненты WebAssembly и автоматические компоненты, которые предварительно обработаны или приняли SSR, вызовы выполняются с помощью HttpClient, зарегистрированного в Программный файл серверного проекта.
Как показано ниже:
builder.Services.AddHttpClient("localtest", httpClient =>
{
httpClient.BaseAddress = new Uri("https://localhost:7047");
});
Использование:
@page "/"
@inject IHttpClientFactory _httpClientFactory
<PageTitle>Home</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app.
@code{
protected override async Task OnInitializedAsync()
{
var httpClient = _httpClientFactory.CreateClient("localtest");
var httpResponseMessage = await httpClient.GetAsync(
"WeatherForecast");
if (httpResponseMessage.IsSuccessStatusCode)
{
using var contentStream =
await httpResponseMessage.Content.ReadAsStreamAsync();
}
}
}
Результат:
Все, что мне нужно, это чтобы при развертывании приложения оно начиналось с адреса «mycompany.com...». Вот и все. До «Blazor Web App» оно работало нормально, теперь это не так. Я понял ваш ответ до «Использования»: но куда делся метод «защищенное переопределение асинхронной задачи OnInitializedAsync()»? и нужно ли его вызывать для каждой страницы?
Во-первых, вам нужно четко указать, в чем заключается ваш вопрос: httpclient используется для отправки запроса внутри этого приложения Blazor в другое приложение. Метод, который я использовал, — это всего лишь тестовый пример того, как можно использовать httpclient для отправки запроса. All I need is that when the app is deployed it will start with the address "mycompany.com..." That is all
, если вы просто хотите установить домен для этого веб-приложения Blazor, это не связано с кодами.
Хорошо. У решения также есть предыдущий проект «Серверное приложение Blazor», и код в моем вопросе отлично работает на нем. В разработке он всегда открывается на «localhost:7122», а при развертывании — на «mycompany.com». Новый проект «Веб-приложение Blazor» был создан с использованием «Интерактивного режима рендеринга: Сервер» и «Местоположение интерактивности: Глобальный», но исходный код, указанный в моем вопросе, теперь игнорируется. Как это можно реализовать в новом проекте, чтобы добиться того же результата, что и в предыдущем проекте?
Используя мои новые коды, используя var httpClient = _httpClientFactory.CreateClient("localtest"); var httpResponseMessage = await httpClient.GetAsync( "WeatherForecast");
можно добиться того же самого. Измените коды program.cs, указав здесь новый URL-адрес httpClient.BaseAddress = new Uri("https://localhost:7047");
Это коды компонентов Blazor, вы можете поместить их внутрь компонента, пожалуйста, проверьте мои коды обновления.
Деталь «не работает». Какой режим рендеринга и где это прописать?