以编程方式获取.ASPXAUTH cookie值

时间:2010-08-18 17:23:22

标签: c# cookies httpwebrequest

我试图以语法方式检索ASPXAUTH cookie但没有成功。发布到此论坛的similar question证明没有用。

我的代码如下所示。一个已知的问题是确保为请求分配CookieContainer,我已经完成了。另外,我可以在调试器中运行Web应用程序,看看请求是否有效 - 用户确实已经过身份验证并且调用了FormsAuthentication.SetAuthCookie()

我的代码如下所示。在最后一行中,response.Cookies始终为空(为了简洁起见,usingclose()语句已被移除。

对stevemegson的回应:

  • 不,response.Headers集合不包含“Set-Cookie”标题
  • 惊人!如果我查询CookieContainer,cookie确实存在:

    CookieCollection cookies = cookieContainer.GetCookies(new Uri(BaseUri));
    Cookie cookie = null;
    foreach (Cookie c in cookies)
    {
        if (c.Name == ".ASPXAUTH")
        {
            cookie = c;
            break;
        }
    }
    return cookie;
    

原始代码:

string uri = string.Format("{0}/Account.aspx/LogOn", BaseUri);
CookieContainer cookieContainer = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.CookieContainer = cookieContainer;
request.Method = "POST";
string postData = string.Format("UserName={0}&Password={1}&RememberMe=true", UserName, Password);
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Cookie cookie = response.Cookies[".ASPXAUTH"];  // Collection is always empty; returns null!!

1 个答案:

答案 0 :(得分:2)

没有什么看起来明显错误,但我接下来要检查的是:

如果您阅读response.Headers的内容,是否可以看到Set-Cookie标头?如果可以避免,你真的不想从标题中解析cookie值,但这将确认标题至少可以恢复正常。

如果直接使用cookieContainer.GetCookies(request.RequestUri)查询CookieContainer,是否可以看到Cookie?

相关问题