我正在 ASP .NET 中创建一个代理页面(我需要绕过跨站点脚本限制)。我需要处理程序根据传入请求向此页面Page_Load
发送一个。HttpWebRequest
var request = (HttpWebRequest)WebRequest.Create(urlToProxy);
request.Method = "GET";
request.GetResponse();
但是,我遇到了一些身份验证问题(是的,我设置request.Credentials
正确,只是这里没有显示),所以我想将来自传入请求(命中我的代理页面)的 cookie 转发到这个传出请求。你会认为这很简单:
request.CookieContiner = Request.Cookies;
但是,这不起作用。传出HttpWebRequest
使用HttpCookie
s,传入HttpRequest
使用Cookie
s。这些类没有继承或接口关系(确实一个在System.Net
,另一个在System.Web
。)
我试图将 s 复制HttpCookie
到Cookie
s 中,然后将它们添加到 s 中CookieContainer
,但我也无法让它工作。
public static IEnumerable<Cookie> ToCookies(this HttpCookie cookie)
{
var cookies = new List<Cookie>(cookie.Values.Count);
foreach (String key in cookie.Values)
{
cookies.Add(new Cookie()
{
Domain = cookie.Domain,
Expires = cookie.Expires,
HttpOnly = cookie.HttpOnly,
Name = cookie.Name,
Path = cookie.Path,
Secure = cookie.Secure,
Value = cookie.Values[key]
});
}
return cookies;
}
...
var cookieContainer = new CookieContainer();
foreach(var httpCookie in Request.Cookies)
{
foreach(var cookie in httpCookie.ToCookies())
{
cookieContainer.Add(cookie); //Exception thrown here
}
}
抛出的异常表示Cookie
无法添加具有null
“域”的 a。显然,一些HttpCookie
s 具有null
“域”属性。
HttpCookie
有没有人对解决这个问题的最佳方法有任何建议Cookie
?我希望我使用的任何解决方案尽可能通用(因此不涉及将已知域硬编码到新Cookie
的 s 中。)
更好的是,有没有一种更简单的方法可以简单地使用HttpRequest
类而不是HttpWebRequest
类来做我想做的事情?