原文: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);
        }
    }
}
View Code

相关文章: