原文:https://blog.csdn.net/z69183787/article/details/78954325
背景:
别个的项目,要开发App接口,要求用前端AJAX的方式访问接口数据。
后台项目用的asp.net mvc,但是所有的方法都是写在controller层里面的,
App接口要求的功能大部分都是controller层里面的方法,
肯定不可能再重新写一遍接口咯,时间也来不及,并且方法也会重复,不利于维护。
主要做了两点:
1、让后端支持跨域
2、跨域时附带把cookie传过去
这里有一个坑,特别注意哈!!!:服务器端 Access-Control-Allow-Credentials = true时,参数Access-Control-Allow-Origin 的值不能为 '*' 。
跨域的代码:
后端:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace CLBIM.Filter { /// <summary> /// 运行跨域 /// </summary> public class AllowCrossSiteJsonAttribute : ActionFilterAttribute { private string[] _domains; public AllowCrossSiteJsonAttribute() { _domains = new string[] { }; } 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", "*"); //} //服务器端 Access-Control-Allow-Credentials = true时,参数Access-Control-Allow-Origin 的值不能为 '*' 。 var Origin = filterContext.RequestContext.HttpContext.Request.Headers["Origin"]; filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", Origin); filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Credentials", "true"); base.OnActionExecuting(filterContext); } } }