Angular 11 请求的资源上不存在“Access-Control-Allow-Origin”标头?

时间:2021-07-21 11:21:33

标签: .net asp.net-core iis asp.net-web-api

我有 dotnet core 5 应用程序和 Angular app,在 local host 中所有 Http methods 运行良好,但在网络主机 HttpGet, HttpPost Methods 上运行正常且 HttpPut, DELETE抛出异常:

<块引用>

从源“---”对 XMLHttpRequest 的“---”的访问已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

配置 Cors 如下所示:

public static IServiceCollection AddAdminApiCors(this IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder =>
                {
                    builder.AllowAnyOrigin();
                    builder.AllowAnyHeader();
                    builder.AllowAnyMethod();
                });
        });

        return services;
    }

Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        services.AddAdminApiCors();

        services.AddMvc();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
app.UseRouting();

        app.UseCors("CorsPolicy");

        app.UseAuthentication();


        app.UseAuthorization();

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

[Authorize]
[EnableCors("CorsPolicy")]
public class CompanyController : ControllerBase
{
    [HttpGet]
    public async Task<ActionResult<IEnumerable<CompanyViewModel>>> Get([FromQuery] CompanyQuery companyQuery)
    {
        return Ok(await _mediator.Send(companyQuery));
    }

    [HttpPost]
    public async Task<ActionResult<int>> Create([FromBody] CreateCompanyCommand command)
    {
        var productId = await _mediator.Send(command);

        return Ok(productId);
    }

    [HttpPut]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    [ProducesDefaultResponseType]
    public async Task<IActionResult> Update([FromBody] UpdateCompanyCommand command)
    {
        await _mediator.Send(command);

        return NoContent();
    }

    [HttpDelete("{id}")]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    [ProducesDefaultResponseType]
    public async Task<IActionResult> Delete(int id)
    {
        await _mediator.Send(new DeleteCompanyCommand { Id = id });

        return NoContent();
    }
}

在许多帖子中都告诉我更改 web.config 文件并删除 WebDAV IIS Module 我关注了他们但我的问题没有解决 cors put error

3 个答案:

答案 0 :(得分:1)

这适用于我的项目:

    services.AddCors(options =>
    {
        options.AddPolicy("CorsPolicy",
            builder =>
            builder.SetIsOriginAllowed(_ => true)
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials());
    });

答案 1 :(得分:0)

您的代码中可能发生异常,服务器向您发送此误导性响应,您可以通过转到托管应用程序并转到 web.config 文件并通过将其设置为 {{1} 来启用日志来检测异常并发起另一个请求并转到已生成的日志文件并调试问题。

答案 2 :(得分:0)

5 天后我找到了我的问题原因,它需要删除 Web.config 文件中的 Web

<system.webServer>
  <modules> 
      <remove name="WebDAVModule"/> 
  </modules>  
</system.webServer>

以及托管提供商公司支持者在托管服务器中应用的一些更改