C# 以编程方式获取.ASPXAUTH cookie值

C# 以编程方式获取.ASPXAUTH cookie值,c#,cookies,httpwebrequest,C#,Cookies,Httpwebrequest,我试图以编程方式检索ASPXAUTH cookie,但没有成功。在这个论坛上发表的一篇文章没有任何帮助 我的代码如下所示。一个已知的问题是确保为请求分配一个CookieContainer,我已经这样做了。此外,我可以在调试器中运行web应用程序,并查看请求是否有效——用户确实经过身份验证,并且调用了FormsAuthentication.SetAuthCookie() 我的代码如下所示。在最后一行中,response.Cookies始终为空(使用和close()语句为简洁起见被删除) 对stev

我试图以编程方式检索ASPXAUTH cookie,但没有成功。在这个论坛上发表的一篇文章没有任何帮助

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

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

对stevemegson的回应:

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!!
  • 否,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!!

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

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


如果使用
CookieContainer.GetCookies(request.RequestUri)
直接查询CookieContainer,您能看到cookie吗?

请参见上面的编辑。我确实可以通过调用cookieContainer.GetCookies()来检索cookies。这并不能回答为什么响应。Cookies是空的,但它解决了我眼前的问题。非常感谢。