Blazor Webassembly独立客户端的Cors问题

时间:2020-09-30 11:24:49

标签: blazor-client-side

我正在为DELETE和POST处理一些问题。

GET工作正常。

设置为:Azure API管理和调用该API的Blazor Webassembly独立客户端(Azure应用程序服务)中的.Net核心API。

尝试删除时出现错误。

“已被CORS策略阻止:对预检请求的响应未通过访问控制检查:不存在“ Access-Control-Allow-Origin”标头”

因此,我很难理解这里需要什么代码。 .NET Core的CORS上到处都有很多示例,而且还有不同的Blazor设置(服务器,托管wasm等)。

我想我需要以某种方式处理预检请求,才能使其正常工作?

这就是我现在所使用的:

调用API的我的ServiceTimes.razor

@code {

private const string ServiceEndpoint = "https://MyProdAPI.azure-api.net/api/ServiceTimes";
private LWS_ServiceTimes[] servicetimes;



LWS_ServiceTimes servicetimeObj = new LWS_ServiceTimes();

string ids = "0";
bool showAddrow = false;

bool loadFailed;

protected override async Task OnInitializedAsync()
{
    ids = "0";
    try
    {
        servicetimes = await Http.GetFromJsonAsync<LWS_ServiceTimes[]>(ServiceEndpoint);
    }
    catch (AccessTokenNotAvailableException exception)
    {
        exception.Redirect();
    }
}


// Delete Method
protected async Task DeleteServiceTimes(long ServiceTimesID)
{
    showAddrow = false;

    ids = ServiceTimesID.ToString();
    await Http.DeleteAsync("https://MyprodAPI.azure-api.net/api/ServiceTimes/1"); //Deletes the ID=1

 }

Blazor Webassembly独立客户端Program.cs

 public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("app");

        builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("https://prodsite.azurewebsites.net") });

        builder.Services.AddMsalAuthentication(options =>
        {
            builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
            options.ProviderOptions.DefaultAccessTokenScopes.Add("api://xxxxxxxx-xxxx-xxxx-xxxx-xxxx/API.Access"); //API.Acess my scope in API
        });

        builder.Services.AddHttpClient("ServerAPI",
    client => client.BaseAddress = new Uri("https://MyprodAPI.azure-api.net"))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();

        builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>()
            .CreateClient("ServerAPI"));

        await builder.Build().RunAsync();
    }

API启动

public void ConfigureServices(IServiceCollection services)
    {
        
        services.AddDbContext<LwsSpiderContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MyDatabase")));

        services.AddSwaggerGen();

      

         services.AddCors(options =>
        {
            options.AddPolicy(name: MyAllowSpecificOrigins,
                              builder =>
                              {
                                  builder.WithOrigins("https://prodsite.azurewebsites.net");
                                 builder.AllowAnyMethod();
                                builder.WithHeaders(HeaderNames.ContentType, HeaderNames.Authorization, "x-custom-header");
                                  builder.AllowCredentials();
        });
        });
        services.AddControllers();
        
      }

   
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseSwagger();

       // app.UseHttpsRedirection();

        app.UseRouting();

        app.UseCors("MyAllowSpecificOrigins");

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    
    }

0 个答案:

没有答案