更新:訪問用戶數據
我已經改變了我的代碼FormsAuthentication.SetAuthCookie(_model.UserName, true);
。我有2個Web.config文件,1個用於MVC,另一個用於WebAPI。在MVC配置中,我定義了
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
這兩個應用程序在同一個域中。
更新:如果我們甚至在使用的WebAPI餅乾?
目前,我有一個使用表單身份驗證和WebAPI項目的MVC項目。問題是我無法讓WebAPI項目中的請求與用戶相關聯。我認爲這是可能的,或者實施是錯誤的?
注意:我把cookie代碼放在WebAPI控制器方法中作爲一個測試,它不是它應該在的地方。
MVC - 處理登錄請求,創建auth票證。
// POST: /Account/Login
[AllowAnonymous]
[HttpPost]
public ActionResult Login(LoginModel _model, string _returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(_model.UserName, _model.Password))
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(_model.UserName, true, 15);
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
Response.Cookies.Add(cookie);
// set redirect
}
}
// If we got this far, something failed, redisplay form
return View(_model);
}
的WebAPI - 處理更新請求
[AcceptVerbs("PUT")]
public HttpResponseMessage UpdateInfo(int _id, ExampleModel _model)
{
try
{
HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
string encTicket = authCookie.Value;
if (!String.IsNullOrEmpty(encTicket))
{
// decrypt the ticket if possible.
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(encTicket);
var userData = ticket.UserData;
}
}
// do update
return Request.CreateResponse(HttpStatusCode.OK, data, GlobalConfiguration.Configuration);
}
catch (Exception err)
{
m_logger.Error(err);
throw;
}
}
所以cookie是空的? – 2013-04-23 09:24:21
是的,該cookie爲空。 – user1883004 2013-04-23 09:25:26
這兩個網站在同一個域名上? – 2013-04-23 09:48:38