Come posso chiamare un servizio di riposo da un'app Blazor

blazor rest

Domanda

Dopo aver creato un'app Blazor predefinita (V0.5.1), otteniamo una pagina FetchData.cshtml che recupera i dati da un file .json locale.

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

Funziona bene Tuttavia, se si modifica questo per ottenere gli stessi dati da una rete Web di resto. NET, la chiamata a Http.GetJsonAsync blocca. Non c'è errore che non si completa mai.

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

Cosa mi manca?

Risposta accettata

Molto probabilmente stai riscontrando un problema CORS, perché l'API e il sito sono in esecuzione su una porta diversa.


Risposta popolare

Avevo bisogno di abilitare Cors, come per Come abilitare le richieste di origine incrociata (CORS) in ASP.NET Core MVC . L'aggiunta di un paio di linee al codice del servizio Web predefinito ha fatto il trucco.

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché