4

首先我創建的cookie容器HttpClientHandler如何在Windows Store應用程序中使用HttpClient登錄ASP.Net MVC網站(表單身份驗證)?

CookieContainer cookies = new CookieContainer(); 
HttpClientHandler handler = new HttpClientHandler(); 
handler.CookieContainer = cookies; 
handler.UseCookies = true; 
var hc = new HttpClient(handler); 

然後我打的基本URL剛拿到的cookie「__RequestVerificationToken」

string r = await hc.GetStringAsync(BaseUrl); 

後來我發帖的用戶名/密碼來登錄URL

HttpContent content = new FormUrlEncodedContent(new[] 
{ 
    new KeyValuePair<string, string>("UserName", "admin"), 
    new KeyValuePair<string, string>("Password", password), 
}); 
HttpResponseMessage response = await hc.PostAsync(LoginUrl, content); 

然後我得到的服務器錯誤「所要求的防僞表單字段" __RequestV erificationToken "不存在「。

但是當我在fiddler中檢查請求時,可以看到「__RequestVerificationToken」已經添加到請求的cookie中。

然後我嘗試在IE中手動登錄,並檢查IE發送的請求類型。

後來我發現IE也把「__RequestVerificationToken」的形式,所以我增加了餅乾的形式

new KeyValuePair<string, string>("__RequestVerificationToken", cookies.GetCookies(new Uri(BaseUrl)).Cast<Cookie>().FirstOrDefault(x => x.Name == "__RequestVerificationToken").Value) 

然後我得到這個錯誤

「所提供的防僞標記驗證Cookie " _ RequestVerificationToken " and the form field " _RequestVerificationToken " were swapped。「

然後我無法得到任何搜索結果在谷歌這個錯誤。

有什麼想法?

謝謝

回答

3

發現問題。

添加到cookie中的「__RequestVerificationToken」與添加到表單中的「__RequestVerificationToken」不同。

所以我從返回的Html字符串中獲取了「__RequestVerificationToken」的值,然後它就起作用了!

+1

感謝這也爲我做了詭計。請將此答覆標記爲答案。 – To1ne 2014-05-23 06:41:24

相關問題