但server端由於會驗證session值是否已存在,
即存取 A.aspx 頁面後會產生一個session,
再存取 B.aspx 頁面後會驗證A.aspx產生的session,
而原本的webclient是沒有辦法保持session,
因此需要透過繼承webclient物件改寫其中的 GetWebRequest,
並將需保持的session透過CookieContainer來保存,
即可實現。
namespace BigdControls
{
public class HttpWebClient:WebClient
{
// Cookie 容器
private CookieContainer cookieContainer;
public HttpWebClient()
{
this.cookieContainer = new CookieContainer();
}
public HttpWebClient(CookieContainer cc)
{
this.cookieContainer = cc;
}
/// <summary>
/// Cookie 容器
/// </summary>
public CookieContainer MyCookies
{
get { return this.cookieContainer; }
set { this.cookieContainer = value; }
}
/// <summary>
/// 覆寫web request方法,讓webclient能保持session
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
protected override WebRequest GetWebRequest(Uri address)
{
//throw new Exception();
WebRequest request ;
request = base.GetWebRequest(address);
//判斷是不是HttpWebRequest.只有HttpWebRequest才有此属性
if (request is HttpWebRequest)
{
HttpWebRequest httpRequest = request as HttpWebRequest;
httpRequest.CookieContainer = this.cookieContainer;
}
return request;
}
}
}
Reference:实现支持会话的WebClient
沒有留言:
張貼留言
留個話吧:)