c# - 在 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 中的包......
解决方案
你有两种方法可以做到这一点。
就像您最初尝试的那样,使用响应标头启用此功能:
Response.Headers.Add("Access-Control-Allow-Origin", "*");
全局配置它并在您的控制器/操作中选择性地使用它。
为此,您可以使用官方文档中的指南,它可以比我更彻底地解释它
推荐阅读
- port - 端口 443 确切用途和描述
- apache-zookeeper - 如何将 Zookeeper 从 3.4.8 升级到 3.4.13?
- kivy - Kivy:动态添加屏幕小部件时出现属性错误
- c# - 在我获得将创建到新数据库的结果后,sqlite 有没有办法?
- c# - ASP.NET Core 中的 WCF 跟踪
- python-3.x - 为什么每次打开终端时都会收到此警告/错误消息?我应该如何解决这个问题?
- angular - 如何在 Angular 4/5 中登录后为登录图像放置完整的背景图像,但不为其他页面放置完整的背景图像
- vue.js - 如何在 vue 路由中导航到 Bootstrap-vue 选项卡中的特定选项卡?
- ajax - Ajax帖子调用错误的网址
- mysql - XAMPP中Mysql意外关闭的解决方法是什么