webclient
クラスで奇妙な動作が検出されました。 UploadValues()
同期メソッドを使用すると、通常は応答URIが得られますが、非同期バージョンUploadValuesTaskAsync()
を同じURLに使用すると、レスポンスuriがnullとして返されます。どうして?Webクライアントが応答を取得しないuri
例:GetAsync
方法で
using (var client = new CustomWebClient())
{
await Get(client);
Get(client);
}
private async Task GetAsync(WebClient client)
{
var resAsync = await client.UploadValuesTaskAsync("http://address.com", requestData);
//client.ResponseUri null here
}
private void Get(WebClient client)
{
var res= client.UploadValues("http://address.com", requestData);
//client.ResponseUri **not** null here
}
client.ResponseUri
がnull、およびUploadValues
にnullなくなります。
EDIT:
私は、Webクライアントは、 "カスタマイズ" で発見:
ので、クラスは次のとおりです。
public class CustomWebClient : WebClient
{
public CookieContainer Cookies { get; private set; }
public Uri ResponseUri { get; private set; }
public CustomWebClient()
{
Cookies = new CookieContainer();
}
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address) as HttpWebRequest;
if (request == null)
{
return base.GetWebRequest(address);
}
request.CookieContainer = Cookies;
return request;
}
protected override WebResponse GetWebResponse(WebRequest request)
{
var response = base.GetWebResponse(request);
ResponseUri = response.ResponseUri;
return response;
}
}
私はsynchronous
方法で、それは前GetWebResponse
方法を打つことを確認次の行に続く。しかしasynchronous
バージョンでは、それは決してGetWebResponse
に当たらない。
を –
そのない非同期ボイドを返すことをお勧めメソッド – gog
正確にResponseUriを読んでいますか? – JuanR