zoukankan      html  css  js  c++  java
  • .net webapi跨域无法获取cookie问题解决办法

    1.首先webapi要设置允许跨域

    /// <summary>
        ///     同源策略
        /// </summary>
        [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
        public sealed class CorsPolicyAttribute : Attribute, ICorsPolicyProvider
        {
            /// <summary>
            ///     同源策略
            /// </summary>
            private readonly CorsPolicy _Policy;
    
            public CorsPolicyAttribute()
            {
                _Policy = new CorsPolicy
                {
                    AllowAnyMethod = true,
                    AllowAnyHeader = true,
                    AllowAnyOrigin = true,
                    PreflightMaxAge = 60*60*6
                };
                _Policy.SupportsCredentials = true; // 这个不能使用True。User跨域问题处理
                _Policy.Headers.Add("*");
                _Policy.Methods.Add("*");
                //_Policy.Origins.Add(PubConstant.CorsUrl);
                _Policy.Origins.Add("*");
            }
    
    
            public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request, CancellationToken cancellationToken)
            {
                return Task.FromResult(_Policy);
            }
        }

    2.API控制器增加同源策略标注

    /// <summary>
        /// 基础控制器
        /// </summary>
        [CorsPolicy]
        [AuthFilter]
        public class BaseApiController : ApiController

    3.存储信息到cookie,注意设置Domain

    public static void SetUserIdCookie(HttpResponseMessage response, string userId)
            {
    
                var expiresDay = 7;
    
                var cookies = new List<CookieHeaderValue>();
                
                //string stryqurc = string.Format(CultureInfo.InvariantCulture, "ricky.{0}",  FunHelper.GetMarkByUserId(userId));
                var newCookie2 = new CookieHeaderValue(UCGlobalDefine.IDCookieName, userId)
                {
                    Domain = "user.17track.net", //这个是api的域名
                    Path = "/",
                    Expires = DateTimeOffset.Now.AddDays(expiresDay)
                };
                cookies.Add(newCookie2);
                response.Headers.AddCookies(cookies);
            }
    
    //response在控制器中创建:
    var response = Request.CreateResponse(HttpStatusCode.OK, result);

    3.webapi获取cookie方法

    public static string GetCookie(HttpRequestMessage request,string cookieName)
            {
                //var cookies = request.Headers.GetCookies()?.FirstOrDefault();
                var cookieList = request.Headers.GetCookies();
                var cookies = cookieList?.FirstOrDefault();
                string uid = string.Empty;
                if (cookies?[cookieName] != null)
                {
                    uid = cookies[cookieName]?.Value;
                }
                return uid;
            }

    4.前端ajax访问,注意设置withCredentials

    //获取当前用户
    Ricky.GetUser = function () {
        $.ajax({
            type: "get",
            url: Ricky.Api.GetUser,
            dataType: "json",
            async: false,
            xhrFields: {
                withCredentials: true
            },
            success: function (result) {
                if (result.Code == 0) {
                    LoginUser = result.Json;
                }
                else if (result.Code == -3) {
                    layer.msg(result.Message);
                    top.location.href = "login.html";
                }
                else {
                    layer.msg(result.Message);
                }
            },
            error: function () {
                layer.msg("登录信息异常");
            }
        });
    };
  • 相关阅读:
    设置MYSQL允许用IP访问
    EasyUI中那些不容易被发现的坑——EasyUI重复请求2次的问题
    Oracle初级性能优化总结
    Asp.Net MVC3.0网站统计登录认证的在线人数
    App.config和Web.config配置文件的配置节点的解析
    App.config和Web.config配置文件的自定义配置节点
    Asp.Net Web API 2第十八课——Working with Entity Relations in OData
    win7凭据管理、win7多用户远程登录、主机头设置、nuget.org无法访问
    Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)
    C#基础知识系列八(const和readonly关键字)
  • 原文地址:https://www.cnblogs.com/CuiRicky/p/10808117.html
Copyright © 2011-2022 走看看