首页 > 解决方案 > .NetCore jquery 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问

问题描述

如果我尝试向 Web api 控制器发送请求,我将在 Web 浏览器下收到错误消息:“请求的资源上不存在 'Access-Control-Allow-Origin' 标头。因此不允许访问 Origin 'null'。响应的 HTTP 状态代码为 500。”

这是我的 jquery 发布请求:

$.ajax({
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            type: "POST",
            url: "http://localhost:12345/api/xs/" + selectedId,
            data: JSON.stringify(anyObj),
            dataType: "json"
        });

这是一个(web api)控制器:

    [Route("api/[controller]")]
    public class XSController : Controller
    {
        [HttpPost("{id}")]
        [EnableCors("AllowAll")]
        //[DisableCors()]
        public async Task<IActionResult> Post(ushort id, [FromBody]AnyObjVM model)
        {
        }
    }

和 startup.cs 文件:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowAll",
              builder =>
              {
                  builder.AllowAnyOrigin()
                         .AllowAnyHeader()
                         .AllowAnyMethod()
                         .AllowCredentials()
                         ;
              });
    });
}

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

        app.UseDefaultFiles();
        app.UseStaticFiles();
        app.UseCors("AllowAll");
        app.UseMvc();
    }

请求头:

Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7
Connection: keep-alive
Content-Length: 166
Content-Type: application/json
Host: localhost:12345
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36

我试图在 startup.cs 文件和控制器方法中启用/禁用 CORS。WebAPI 在 IIS Express 上的本地计算机上运行。一个调用 web api 的站点也在我的本地机器上——我手动运行该站点(单击站点文件),这就是为什么将 origin 设置为 null 的原因。通常我可以调用 web api 方法,有时不能。我还尝试使用选项--disable-web-security(可选--user-data-dir="d:/temp_chrome")运行chrome,但它没有改变任何东西。

我该如何解决这个问题?

标签: jqueryhttp-postasp.net-core-2.0

解决方案


推荐阅读