Nano Hash - криптовалюты, майнинг, программирование

В решении Blazor WebAssembly, как разместить клиентское приложение Blazor WASM на порту, отличном от порта API сервера.

У меня есть решение Blazor WebAssembly с клиентским проектом, серверным проектом и общим проектом на основе шаблона решения по умолчанию от Microsoft. Я редактирую и отлаживаю предварительную версию Visual Studio 2019 с помощью Google Chrome.

В готовом виде решение имеет один запускаемый проект - серверное приложение. Это серверное приложение имеет ссылку на проект клиентского приложения. Вы можете настроить его на использование HTTPS, установив флажок «Включить SSL» в свойствах серверного проекта, и я это сделал.

Когда вы нажимаете на отладку, он отлично работает.

Теперь я хочу изменить его так, чтобы все мои страницы Blazor WASM обслуживались с https://localhost:44331 и API. Конечные точки контроллера серверного приложения обслуживаются с https://localhost:44331/api

Я хочу использовать эту дополнительную часть URL-адреса «/ api», чтобы запросы к API были отделены от простой навигации по клиентскому приложению Blazor. Поэтому, если я запрошу «https://localhost:44331/api/something», я знаю, что собираюсь попасть в точку в моем веб-API, но если я запрошу "https://localhost:44331/something" Я знаю, что собираюсь перейти на определенную страницу в клиентском приложении Blazor. Я думаю, что это также будет ближе к тому, как нормальная установка будет производиться.

Надеюсь, понятно, что я пытаюсь сделать.

Очевидным местом для начала было изменение параметра «URL-адрес приложения» в разделе «Отладка» свойств серверного приложения на «". Проект назначает защищенный URL-адрес «https://localhost:44331/api». Я оставил те же настройки в клиентском приложении, поэтому в клиентском приложении параметр «URL приложения» в разделе «Отладка» свойств клиентского приложения по-прежнему имеет значение «", при этом проект назначает безопасный URL-адрес "https://localhost:44331 ".

Это все ломает.

Теперь "https://localhost:44331/" переводит меня к ошибке 404 Not Found и "https://localhost:44331/api "переводит меня на страницу, на которой написано:

Загрузка ...
Произошла необработанная ошибка. Перезагрузить ????

Это было бы слишком просто! Кто-нибудь знает, как правильно сделать среду такой, какой я хочу, пожалуйста?


  • На какой у вас версии? В последнее время в эту модель были внесены некоторые изменения. 09.04.2020
  • Я использую Microsoft Visual Studio Community 2019 Preview Version 16.6.0 Preview 2.1. Приложение WASM нацелено на netstandard2.1 с RazorLang 3.0. Веб-API нацелен на netcoreapp3.1. Оба находятся на C # 8.0. 09.04.2020

Ответы:


1

Ok! Я наконец нашел способ, который работает. Это несложно, но мне потребовалось дней, чтобы получить ответ, поэтому я собираюсь опубликовать его здесь, потому что я думаю, что он будет полезен другим людям.

На ваших контроллерах:

[Route("api/[controller]")]
public class SampleController : ControllerBase
    {
    //Etc.
    }

В Startup.cs ...

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            //Etc.
            app.UseStaticFiles();
            app.UseRouting();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
                endpoints.MapControllers();
                endpoints.Map("api/{**slug}", HandleApiFallback);
                endpoints.MapFallbackToFile("{**slug}", "index.html");
            });
        }

        private Task HandleApiFallback(HttpContext context)
        {
            context.Response.StatusCode = StatusCodes.Status404NotFound;
            return Task. CompletedTask;
        }
16.04.2020
  • не могли бы вы объяснить, что здесь означает {** slug}? 24.06.2021

  • 2

    Минимальные изменения в свежем приложении из шаблона Wasm / Hosted:

    WeatherForecastController.cs

    //[Route("[controller]")]
      [Route("api/[controller]")]
    

    FetchData.razor

    //forecasts = await Http.GetJsonAsync<WeatherForecast[]>("WeatherForecast");
      forecasts = await Http.GetJsonAsync<WeatherForecast[]>("api/WeatherForecast");
    
    09.04.2020
  • Спасибо за очень быстрый ответ, Хенк! Когда приложение настроено таким образом, приложение Blazor по-прежнему перехватывает запросы к localhost: 44331 / api / something и отображает страницу с сообщением, что по этому адресу ничего нет. Если возможно, я бы ожидал, что такой запрос доставит необработанный JSON из веб-API или ошибку вместо страницы в приложении Blazor WASM, потому что я хочу, чтобы клиентское приложение участвовало только тогда, когда URL-адрес не имеет / api путь. Вы видите, что я имею в виду? 09.04.2020
  • Привет @ henk-holterman! Я надеюсь, что с тобой все в порядке. Мне было интересно, есть ли у вас возможность взглянуть на это и знаете, как настроить резервный контроллер, чтобы маршруты / api не направлялись в клиентское приложение Blazor? 16.04.2020
  • Спасибо за это, Хенк! Для людей, работающих с ASP-NET-Core, ниже представлена ​​моя первая попытка решения. Кажется, работа выполнена, но я был бы рад узнать, является ли это стандартным и правильным способом: 16.04.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..