Comment appeler un service de repos depuis une application Blazor?

blazor rest

Question

Après avoir créé une application Blazor par défaut (V0.5.1), nous obtenons une page FetchData.cshtml qui extrait ses données d’un fichier .json local.

@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; }
    }
}

Cela fonctionne bien. Toutefois, si vous modifiez cette Http.GetJsonAsync pour obtenir les mêmes données à partir d’une application Web .net, l’appel à Http.GetJsonAsync suspendu. Il n'y a pas d'erreur, cela ne se termine jamais.

@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; }
    }
}

Qu'est-ce que je rate?

Réponse acceptée

Très probablement, vous rencontrez un problème CORS, car l'API et le site s'exécutent sur un port différent.


Réponse populaire

J'avais besoin d'activer Cors, comme indiqué dans Comment activer les demandes d'origine croisée (CORS) dans ASP.NET Core MVC . L'ajout de quelques lignes au code de service Web par défaut a fait l'affaire.

        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();
        }



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi