搜索
您的当前位置:首页正文

.netwebapi跨域无法获取cookie问题解决办法

来源:欧得旅游网
.netwebapi跨域⽆法获取cookie问题解决办法

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

///

/// 同源策略 ///

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]

public sealed class CorsPolicyAttribute : Attribute, ICorsPolicyProvider {

///

/// 同源策略 ///

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 GetCorsPolicyAsync(HttpRequestMessage request, CancellationToken cancellationToken) {

return Task.FromResult(_Policy); } }

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

///

/// 基础控制器 /// [CorsPolicy] [AuthFilter]

public class BaseApiController : ApiController

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

public static void SetUserIdCookie(HttpResponseMessage response, string userId) {

var expiresDay = 7;

var cookies = new List();

//string stryqurc = string.Format(CultureInfo.InvariantCulture, \"ricky.{0}\ 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(\"登录信息异常\"); } });};

因篇幅问题不能全部显示,请点此查看更多更全内容

Top