当前位置: 首页 > news >正文

C# ASP.NET MVC 配置允许跨域访问

在web.config文件中的 system.webServer 节点下 增加如下配置

 

<httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
      </customHeaders>
    </httpProtocol>
View Code

 

<httpProtocol>
            <customHeaders>
                <add name="Access-Control-Allow-Origin" value="*" />
                <add name="Access-Control-Allow-Headers" value="*" />
                <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
            </customHeaders>
        </httpProtocol>
View Code

在ASP.Net webapi中可以使用  Microsoft.AspNet.WebApi.Cors  来实现:

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // New code
            config.EnableCors();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
View Code

 

[EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")]
    public class TestController : ApiController
    {
        // Controller methods not shown...
    }
View Code

但在MVC中不能使用这个,需要自定义一个类:

public class AllowCrossSiteJsonAttribute: ActionFilterAttribute
    {
        private string[] _domains;
        public AllowCrossSiteJsonAttribute(string domain)
        {
            _domains= new string[] { domain };
        }
        public AllowCrossSiteJsonAttribute(string[] domains)
        {
            _domains = domains;
        }
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var context = filterContext.RequestContext.HttpContext;
            var host = context.Request.UrlReferrer?.Host;
            if (host != null && _domains.Contains(host))
            {
                filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
            }
            base.OnActionExecuting(filterContext);
        }
    }
View Code

在被访问的控制器上加上AllowCrossSiteJson:

[AllowCrossSiteJson("localhost")]
        public JsonResult Index()
        {
            var holidays = new List<Holiday>
            {
                new Holiday
                {
                    Title="2 Weeks in Rhodes",
                    Price=688,
                    ImgUrl="http://media.wiley.com/product_data/coverImage/84/04702927/0470292784.jpg"
                },
                new Holiday
                {
                    Title="1 Weeks in Barbados",
                    Price=320,
                    ImgUrl="http://media.wiley.com/product_data/coverImage/84/04702927/0470292784.jpg"
                }
            };
            return Json(holidays, JsonRequestBehavior.AllowGet);
        }
View Code

https://www.cnblogs.com/uptothesky/p/6178787.html

转载于:https://www.cnblogs.com/love201314/p/9173523.html

相关文章:

  • 运算符基础知识——比较运算符
  • node升级后,项目中的node-sass报错的问题
  • Mongodb数据库连接
  • ROS常用工具
  • Java基础随笔2
  • python3练习100题——026
  • Nodejs学习笔记(七)—Node.js + Express 构建网站简单示例
  • 求最短路径(Bellman-Ford算法与Dijkstra算法)
  • 49. Group Anagrams - LeetCode
  • 1 年经验 Java 求职面试题
  • 有赞11·11:全链路压测方案设计与实施详解
  • 输入处理与安全性
  • 基于结构的距离度量
  • partprobe 和 partx 的用法
  • 开发环境问题
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • angular2 简述
  • E-HPC支持多队列管理和自动伸缩
  • JavaScript函数式编程(一)
  • JS笔记四:作用域、变量(函数)提升
  • js面向对象
  • linux学习笔记
  • maven工程打包jar以及java jar命令的classpath使用
  • text-decoration与color属性
  • 初探 Vue 生命周期和钩子函数
  • 基于遗传算法的优化问题求解
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Prometheus VS InfluxDB
  • # .NET Framework中使用命名管道进行进程间通信
  • # Java NIO(一)FileChannel
  • #Lua:Lua调用C++生成的DLL库
  • #微信小程序:微信小程序常见的配置传旨
  • (AngularJS)Angular 控制器之间通信初探
  • (poj1.3.2)1791(构造法模拟)
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (学习日记)2024.01.19
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)WLAN定义和基本架构转
  • .jks文件(JAVA KeyStore)
  • .NET Core中的去虚
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • @拔赤:Web前端开发十日谈
  • [ linux ] linux 命令英文全称及解释
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [autojs]autojs开关按钮的简单使用
  • [C#][DevPress]事件委托的使用
  • [Codeforces1137D]Cooperative Game
  • [DM复习]Apriori算法-国会投票记录关联规则挖掘(上)
  • [ERROR] Plugin 'InnoDB' init function returned error
  • [ISITDTU 2019]EasyPHP
  • [Markdown] 02 简单应用 第二弹
  • [Oh My C++ Diary]一元作用域运算符::的使用
  • [pdf]《软件方法》强化自测题业务建模需求分析共191页,230题