我一直在圍繞一個ASP .Net MVC應用程序,它將從不同站點以不同配置(因此我無法使用FormsAuthentication SSO方式)登錄請求。我決定解決這個問題的方式是創建臨時登錄請求令牌,因此每個令牌只能使用一次,並且使用這些令牌,應用程序將進行用戶會話。與會話狀態相同的項目中的Web API和MVC
爲了避免不必要地生成令牌,我想先詢問服務器是否用戶尚未登錄。我決定嘗試通過HttpClient。代碼的寫法如下。
var client = new HttpClient { BaseAddress = new Uri("http://mywidget.com") };
client.Timeout = TimeSpan.FromMilliseconds(18000);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.GetAsync(String.Format("/userIsLogged/{0}", userId)).Result;
response.EnsureSuccessStatusCode();
bool isLogged = response.Content.ReadAsAsync<bool>().Result;
return isLogged;
我想出了兩種可能的方式做出驗證。我按如下方式在Web API和MVC中編寫了相同的操作。
[HttpGet]
public bool UserIsLogged(int userId)
{
return (HttpContext.Current.Session != null && ((int)HttpContext.Current.Session["userId"]) == userId);
}
有了這兩個我發現問題,我不知道哪個服務器會更好爲我的目的。
MVC操作將答案作爲HTML返回,客戶端顯然無法處理答案,而且我還沒有找到正確處理它的方法。
API操作可以處理答案,但Web API默認情況下不處理會話狀態;你必須調整它,所以它可以,而且我不知道這兩個會話是否會相同。
我不確定哪一個是正確的路要走,或者如果我應該嘗試另一種解決方案來解決這個問題。
謝謝。
謝謝。有效! 你說得對。通過將響應作爲Json發送,即使它是一個Action Result,客戶也可以讀取答案。 你對另一個也是對的。我將開始將所有內容都發送給Json,並看看它是如何實現的。 –