热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在WebAPI中启用CORS

浏览器安全策略上的安全限制可以有效的阻止Ajax向另外一个域server发起请求,这就是著名的同源策略,那如何突破这种限制呢?可以使用CO

浏览器安全策略上的安全限制可以有效的阻止 Ajax 向另外一个域server发起请求,这就是著名的 同源策略,那如何突破这种限制呢?可以使用 CORS (Cross-Origin Resource Sharing) 跨域资源共享来解决此类问题,它是一个 W3C 的标准,允许你跳出浏览器所采用的同源策略的限制,即在一个域中请求另外一个域的资源。

你可以在 WebAPI 中使用 Cors包 或者 Owin中间件 来开启CORS,值得注意的是,一个完整的 request请求 是由 scheme + host + port 三部分组成,所以根据这三个部分就能判断当前请求是否为同源请求,如不是的话,浏览器将会主动进行阻止,如下代码所示:

WebAPI 中启用 CORS

要想在 ASP.NET Web API 中启动 CORS,只需通过 Nuget 安装 Microsoft.AspNet.WebApi.Cors 包即可,如下代码所示:


Install-Package Microsoft.AspNet.WebApi.Cors

值得注意的是,CORS 可以应用到三种作用域上。

  • Action 级

  • Controller 级

  • Global 级

下面就来逐一看一下。

在 Global 级使用 CORS

要想作用到全局,可以调用 HttpConfiguration 实例下的 EnableCors() 方法即可,如下代码所示:

public static class WebApiConfig{public static void Register(HttpConfiguration config){// Web API configuration and servicesstring origin = "http://localhost:50164/IDGWebClient/";EnableCorsAttribute cors = new EnableCorsAttribute(origin, "*", "GET,POST");config.EnableCors(cors);}}

从上面的代码可以看出,origin 指定了可以被跨域的请求, * 指定了可被允许的header头信息,GET,POST 则表示可以接收的 Http Method。

在 Controller 级使用 CORS

要想在 Controller 级上启用,很简单,只需在 xxxxController 中打上 EnableCors 标记即可,如下代码所示:

[EnableCors(origins: "http://localhost:50164/", headers: "*", methods: "*")]public class ValuesController : ApiController{// GET api/valuespublic IEnumerable Get(){return new string[] { "value1", "value2" };}}

在 Action 级使用 CORS

类似的,你也可以将 EnableCors 应用到 Action 级别,下面的代码展示了如何去使用。

public class ValuesController : ApiController{[EnableCors(origins: "http://localhost:50164/", headers: "*", methods: "*")]public IEnumerable Get(){return new string[] { "value1", "value2" };}}

禁用特定的 Action 上的 CORS

当我们将 CORS 应用到了 Global 级别后,有时候为了安全需要,必须关闭某些 Action 的 CORS,这里使用 DisableCors 特性即可,下面的代码展示了如何去禁用。

public class ValuesController : ApiController{[DisableCors()]public IEnumerable Get(){return new string[] { "value1", "value2" };}}

当然,如果你使用的是 ASP.NET Core,可以通过 Nuget 将 Microsoft.AspNetCore.Cors 包 引入到项目中,然后在 Startup.cs 中做如下配置即可。


public void ConfigureServices(IServiceCollection services)
{services.AddCors();
}

译文链接:https://www.infoworld.com/article/3173363/how-to-enable-cors-on-your-web-api.html



推荐阅读
  • 应用程序配置详解
    本文介绍了配置文件的关键特性及其在不同场景下的应用,重点探讨了Machine.Config和Web.Config两种主要配置文件的用途和配置方法。文章还详细解释了如何利用XML格式的配置文件来调整应用程序的行为,包括自定义配置、错误处理、身份验证和授权设置。 ... [详细]
  • 本文探讨了为何采用RESTful架构及其优势,特别是在现代Web应用开发中的重要性。通过前后端分离和统一接口设计,RESTful API能够提高开发效率,支持多种客户端,并简化维护。 ... [详细]
  • 本文详细介绍了如何通过 `vue.config.js` 文件配置 Vue CLI 的打包和代理设置,包括开发服务器配置、跨域处理以及生产环境下的代码压缩和资源压缩。 ... [详细]
  • 开发笔记:新手DVWACSRF
    开发笔记:新手DVWACSRF ... [详细]
  • Redis 教程01 —— 如何安装 Redis
    本文介绍了 Redis,这是一个由 Salvatore Sanfilippo 开发的键值存储系统。Redis 是一款开源且高性能的数据库,支持多种数据结构存储,并提供了丰富的功能和特性。 ... [详细]
  • 解决getallheaders函数导致的500错误及8种服务器性能优化策略
    本文探讨了解决getallheaders函数引起的服务器500错误的方法,并介绍八种有效的服务器性能优化技术,包括内存数据库的应用、Spark RDD的使用、缓存策略的实施、SSD的引入、数据库优化、IO模型的选择、多核处理策略以及分布式部署方案。 ... [详细]
  • 利用HTML5构建网页便利贴
    本文探讨了通过HTML5的新特性,如内容可编辑性和本地存储功能,创建一个实用的网页便利贴。此项目不仅展示了HTML5的强大能力,还为开发者提供了实际应用这些技术的方法。 ... [详细]
  • 深入理解FastDFS
    FastDFS是一款高效、简洁的分布式文件系统,广泛应用于互联网应用中,用于处理大量用户上传的文件,如图片、视频等。本文探讨了FastDFS的设计理念及其如何通过独特的架构设计提高性能和可靠性。 ... [详细]
  • OpenWrt 是一款高度可定制的嵌入式 Linux 发行版,广泛应用于无线路由器等领域,拥有超过百个预装软件包。本文详细探讨如何在 OpenWrt 上通过 Luci 构建自定义模块,以扩展其功能。 ... [详细]
  • php怎么重新发布网站(2023年最新分享) ... [详细]
  • 使用 NDB 提升 Node.js 应用调试体验
    本文介绍了由 Google Chrome 实验室推出的新一代 Node.js 调试工具 NDB,旨在为开发者提供更加高效和便捷的调试解决方案。 ... [详细]
  • 本文档详细介绍了服务器与应用系统迁移的策略与实施步骤。迁移不仅涉及数据的转移,还包括环境配置、应用兼容性测试等多个方面,旨在确保迁移过程的顺利进行及迁移后的系统稳定运行。 ... [详细]
  • 本文详细介绍了Java中`org.sakaiproject.site.api.Site.addPage()`方法的功能和使用方法,并提供了多个实际项目中的代码示例。 ... [详细]
  • 每位开发者都应该拥有一个展示自我技能与分享知识的空间——个人技术博客。本文将指导你如何使用静态网站生成器Hexo结合GitHub Pages搭建这样一个平台。 ... [详细]
  • JavaScript 实现购物商城商品图片放大功能
    本文介绍了如何使用 JavaScript 和 CSS 实现购物商城中商品图片的放大功能,解决了图片放大时文字位置变化的问题,并提供了详细的代码示例。 ... [详细]
author-avatar
lijunlin66_8460dd
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有