首页 > 解决方案 > 在 ASP.NET HTTP 响应中设置 CORS 标头

问题描述

我正在尝试为我的 HTTP 响应设置标头以包含 CORS 标头Access-Control-Allow-Origin,以便我的 Anguler.js Web 应用程序可以轻松读取响应。

为此,我正在执行以下操作:

using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace tecboxapi777.Controllers
{

 public class WorkersController : ApiController
    {
        // GET: api/Worker
        [Route("api/Workers")]
        [HttpGet]
        public HttpResponseMessage Get()
        {
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created);
            response.Headers.NAME_OF_THE_HEADER = "Access-Control-Allow-Origin";

        }
    }
}

如您所见,我找不到 CORS 标头的正确名称。我在网上搜索过,但我发现的只是使用类似于Access-Contro-Allow-Origin = "*"甚至无法编译的东西。

我的问题是:如何正确设置我的 CORS 标头,以便我的 Angular.JS webapp 能够读取我的响应?

目前,每当我尝试向我的 API 发出 GET 请求时,Firefox 的开发者模式控制台都会返回以下消息:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://192.168.0.6:45455/api/Workers. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing)

为了完整起见,执行 GET 请求的 Angular.JS 代码如下:

posts: Observable<any>;
getPosts(){
    this.posts = this.http.get(this.ROOT_URL + '/api/Workers');
    console.log(this.posts);
}

编辑:我接受了Sotiris Koukios-Panopoulos 的回答,因为这是我为解决我的问题所做的,而且它不需要安装软件包。尽管如此,Manish 的答案是更好的答案,如果您关心什么被认为是标准,那么您应该遵循它。

令我吃惊的是,一切,甚至在响应中添加标头,都需要 .NET 中的包......

标签: c#asp.netrest

解决方案


你有两种方法可以做到这一点。

  • 就像您最初尝试的那样,使用响应标头启用此功能:

    Response.Headers.Add("Access-Control-Allow-Origin", "*");

  • 全局配置它并在您的控制器/操作中选择性地使用它。

    为此,您可以使用官方文档中的指南,它可以比我更彻底地解释它


推荐阅读