Как я могу вызвать службу отдыха из приложения Blazor

blazor rest

Вопрос

После создания приложения Blazor по умолчанию (V0.5.1) мы получаем страницу FetchData.cshtml, которая получает свои данные из локального файла .json

@functions {
    WeatherForecast[] forecasts;

    protected override async Task OnInitAsync()
    {
        forecasts = await Http.GetJsonAsync<WeatherForecast[]>("sample-data/weather.json");
    }

    class WeatherForecast
    {
        public DateTime Date { get; set; }
        public int TemperatureC { get; set; }
        public int TemperatureF { get; set; }
        public string Summary { get; set; }
    }
}

Это прекрасно работает. Однако, если вы измените это, чтобы получить те же данные из сети .net core web api, вызывает зависание Http.GetJsonAsync . Нет ошибки, которую он просто никогда не завершает.

    protected override async Task OnInitAsync()
    {
        forecasts = await Http.GetJsonAsync<WeatherForecast[]>(
            "http://localhost:5000/api/weatherforecast/");
    }

Что мне не хватает?

Принятый ответ

Скорее всего, вы столкнулись с проблемой CORS, потому что API и сайт работают на другом порту.


Популярные ответы

Мне нужно было включить Cors, как это сделать. Как вы разрешаете запросы с кросс-началом (CORS) в ASP.NET Core MVC . Добавление пары строк в код веб-службы по умолчанию сделало трюк.

        public void ConfigureServices(IServiceCollection services)
        {
            // add this
            services.AddCors(); 

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            // and this
            app.UseCors(builder =>
            {
                builder.WithOrigins("http://localhost:5000")
                       .WithMethods("GET", "POST")
                       .AllowAnyHeader();
            });

            app.UseMvc();
        }


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему