WebApi系列~开放的CORS,跨域资源访问对所有人开放

简介:

之前有客户问我,如何AJAX跨域post,这个问题挺有意思,在我们看来,我是不被允许的,因为它是不安全的,但随着web api的火热,这个东西也被人们一步步的接受了,确实,有时,我们的接口希望对所有人公开,它并不在乎有人恶意去POST灌数据,呵呵!

实现思路:向HTTP请求头添加跨域标识Access-Control-Allow-Origin,将它的值设为*即可,当然如果你一个个页面去加那就太麻烦了,也不推荐,有一天老总感觉这是不安全的了,让你去掉它,只你可就麻烦大了,哈哈,所以,还有找个全局点吧!

开放的CORS过滤器,只对类开放,不支持方法单独设置

    /// <summary>
    /// 开放cors协议,支持跨域访问
    /// </summary>
    [AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
    public class OpenCorsAttribute : ActionFilterAttribute
    {
        /// <summary>
        /// 开放cors协议,支持跨域访问的初始化
        /// </summary>
        public OpenCorsAttribute()
        {
        }

        /// <summary>
        ///在action渲染之前
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {

            var responseHead = filterContext.RequestContext.HttpContext.Response.Headers;
            if (responseHead != null)
            {
                responseHead.Add("Access-Control-Allow-Origin", "*");
            }
            base.OnActionExecuting(filterContext);


        }
    }

使用它也非常简单

   [OpenCorsAttribute]
    public class HomeController : AsyncController
    {
}

而如果希望所有控制器都添加这个特性,可以在FilterConfig类中去添加全局过滤器

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new OpenCorsAttribute());
            filters.Add(new GlobalErrorAttribute());
            filters.Add(new HandleErrorAttribute());
            filters.Add(new UrlRuleFilterAttribute());
        }

这样,你所有的Action也被破加上了这个特性,当然,如果你手动向Action上这是不被允许的,因为我们设置了AttributeUsage(AttributeTargets.Class),呵呵

程序截图

 本文转自博客园张占岭(仓储大叔)的博客,原文链接:WebApi系列~开放的CORS,跨域资源访问对所有人开放,如需转载请自行联系原博主。

目录
相关文章
|
2月前
|
JSON 安全 前端开发
浅析CORS跨域漏洞与JSONP劫持
浅析CORS跨域漏洞与JSONP劫持
71 3
|
7天前
|
JSON 前端开发 安全
CORS 是什么?它是如何解决跨域问题的?
【10月更文挑战第20天】CORS 是一种通过服务器端配置和浏览器端协商来解决跨域问题的机制。它为跨域资源共享提供了一种规范和有效的方法,使得前端开发人员能够更加方便地进行跨域数据交互。
|
20天前
|
缓存 前端开发 应用服务中间件
CORS跨域+Nginx配置、Apache配置
CORS跨域+Nginx配置、Apache配置
90 7
|
2月前
|
安全
CORS 跨域资源共享的实现原理
CORS 跨域资源共享的实现原理
|
3月前
|
Web App开发 JSON 数据格式
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
【Azure Developer】浏览器查看本地数据文件时遇见跨域问题(CORS)
|
3月前
|
API
【Azure Function】Function本地调试时遇见跨域问题(blocked by CORS policy)
【Azure Function】Function本地调试时遇见跨域问题(blocked by CORS policy)
【Azure Function】Function本地调试时遇见跨域问题(blocked by CORS policy)
|
3月前
|
安全 开发者 UED
|
5月前
|
前端开发 安全 JavaScript
Spring Boot2 系列教程(十四)CORS 解决跨域问题
Spring Boot2 系列教程(十四)CORS 解决跨域问题
|
6月前
|
存储 安全 前端开发
第五章 跨域资源共享(CORS):现代Web开发中的关键机制
第五章 跨域资源共享(CORS):现代Web开发中的关键机制
170 1
|
3月前
|
安全 前端开发 Java
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
在Web安全上下文中,源(Origin)是指一个URL的协议、域名和端口号的组合。这三个部分共同定义了资源的来源,浏览器会根据这些信息来判断两个资源是否属于同一源。例如,https://www.example.com:443和http://www.example.com虽然域名相同,但由于协议和端口号不同,它们被视为不同的源。同源(Same-Origin)是指两个URL的协议、域名和端口号完全相同。只有当这些条件都满足时,浏览器才认为这两个资源来自同一源,从而允许它们之间的交互操作。
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例