1

我正在 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 复制HttpCookieCookies 中,然后将它们添加到 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类来做我想做的事情?

4

0 回答 0