我正在 ASP .NET 中创建一个代理页面(我需要绕过跨站点脚本限制)。我需要处理程序根据传入请求向此页面Page_Load发送一个。HttpWebRequest
var request = (HttpWebRequest)WebRequest.Create(urlToProxy);
request.Method = "GET";
request.GetResponse();
但是,我遇到了一些身份验证问题(是的,我设置request.Credentials正确,只是这里没有显示),所以我想将来自传入请求(命中我的代理页面)的 cookie 转发到这个传出请求。你会认为这很简单:
request.CookieContiner = Request.Cookies;
但是,这不起作用。传出HttpWebRequest使用HttpCookies,传入HttpRequest使用Cookies。这些类没有继承或接口关系(确实一个在System.Net,另一个在System.Web。)
我试图将 s 复制HttpCookie到Cookies 中,然后将它们添加到 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。显然,一些HttpCookies 具有null“域”属性。
HttpCookie有没有人对解决这个问题的最佳方法有任何建议Cookie?我希望我使用的任何解决方案尽可能通用(因此不涉及将已知域硬编码到新Cookie的 s 中。)
更好的是,有没有一种更简单的方法可以简单地使用HttpRequest类而不是HttpWebRequest类来做我想做的事情?