[英]How to set and return session id in headers in web api2
成功登录后,我想在响应头中返回session_id
以及我想返回的一些对象。
我的典型响应头如下。
Response
Header: Set-cookie: session_id=121212-343dsfsd-4323132, path=/, expires: 1212
Body: {
“status”: 0,
“data”: {
“userRole”: “SUPER_ADMIN”
}
}
我正在尝试按以下方式实现上述目标。
bool result = //...validate username and password with database
if(result == true)
{
SessionIDManager manager = new SessionIDManager();
string newSessionId= manager.CreateSessionID(HttpContext.Current);
var resp = new HttpResponseMessage();
var cookie = new CookieHeaderValue("session-id",newSessionId);
cookie.Expires = DateTimeOffset.Now.AddDays(1);
cookie.Domain = Request.RequestUri.Host;
cookie.Path = "/";
resp.Headers.AddCookies(new CookieHeaderValue[] { cookie });
//return resp;
obj.UserRole = (from c in entityObject.NCT_UserRegistration where obj.User_Name == c.User_Name && obj.User_Password == c.User_Password select c.User_Role).FirstOrDefault();
obj.Success = 0;
obj.User_Password="";
return Ok(obj);
}
我不确定我遵循的方式是否正确。 我怎样才能像上面一样返回sessionid
?
将上面的代码重构如下
if(result == true) {
obj.UserRole = (from c in entityObject.NCT_UserRegistration where obj.User_Name == c.User_Name && obj.User_Password == c.User_Password select c.User_Role).FirstOrDefault();
obj.Success = 0;
obj.User_Password = "";
var response = Request.CreateResponse(HttpStatusCode.OK, obj);
var newSessionId = new SessionIDManager().CreateSessionID(HttpContext.Current);
var cookie = new CookieHeaderValue("session-id", newSessionId);
cookie.Expires = DateTimeOffset.Now.AddDays(1);
cookie.Domain = Request.RequestUri.Host;
cookie.Path = "/";
response.Headers.AddCookies(new[] { cookie });
return ResponseMessage(response);
}
主要区别在于如何创建和返回响应。 原始代码是手动创建一个新的响应,用 cookie 填充它,然后返回另一个完全不同的响应,该响应的主体减去 cookie。 即: Ok(obj)
。
上面的代码创建了一个包含要返回的对象值的响应,然后将 cookie 头信息添加到响应中。
如果 OP 的初衷是返回IHttpActionResult
,那么ResponseMessage(response)
会将HttpResponseMessage
包装在IHttpActionResult
派生实现中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.