2

私のウェブサイトでは、フォーム認証を使用しています。この目的のためにウェブリクエストを作成したいのですが、cookieContainer の助けを借りています。私のコードはこれです

 string url = HttpContext.Current.Request.Url.AbsoluteUri;
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    HttpCookie cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
    Cookie authenticationCookie = new Cookie(
        FormsAuthentication.FormsCookieName,
        cookie.Value,
        cookie.Path,
       HttpContext.Current.Request.Url.Authority);
    req.CookieContainer = new CookieContainer();
    req.CookieContainer.Add(authenticationCookie);
    WebResponse res = req.GetResponse();

しかし、このコードは「The 'Domain'='localhost:300' part of the cookie is invalid.」というエラーをスローします。したがって、このコード行からエラーが発生していることがわかりました。

Cookie authenticationCookie = new Cookie(
    FormsAuthentication.FormsCookieName,
    cookie.Value,
    cookie.Path,
   HttpContext.Current.Request.Url.Authority);

サイトの URL は localhost:300 です。これに対する解決策を見つけることができません。何が問題だったのか教えてもらえますか?

4

1 に答える 1

5

Cookie コンストラクターに渡すドメイン プロパティからポート番号を除外してみてください。

Cookie authenticationCookie = new Cookie(
    FormsAuthentication.FormsCookieName,
    cookie.Value,
    cookie.Path,
    HttpContext.Current.Request.Url.Host
);

または、Cookie コンテナーを使用せずに、Cookie を HTTP ヘッダーとして直接設定します。

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpCookie cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
req.Headers[HttpRequestHeader.Cookie] = string.Format("{0}={1}", cookie.Name, cookie.Value);
WebResponse res = req.GetResponse();
于 2013-01-14T13:37:21.023 に答える