【问题标题】:AllowAutoRedirect in windowsPhoneWindowsPhone 中的 AllowAutoRedirect
【发布时间】:2023-03-03 14:10:01
【问题描述】:

在 HttpClientHandler 中具有 AllowAutoRedirect 属性,但在为 WindowsPhone 构建应用程序时抛出异常:

此平台不支持 HttpClientHandler.AllowAutoRedirect。请在使用 HttpClientHandler.AllowAutoRedirect 之前检查 HttpClientHandler.SupportsRedirectConfiguration。

我真的很想阻止自动重定向。 我尝试使用 HttpWebRequest:

    var client = (HttpWebRequest) WebRequest.Create(connectionUrl);
client.Headers["AllowAutoRedirect"] = "false";
client.Method = "GET";
client.Headers["UserAgent"] = @"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31";
client.ContentType = "application/json";
client.Headers["ContentLength"] = client.ToString().Length.ToString();
client.BeginGetResponse(Callback, client);
private void Callback(IAsyncResult ar)
{
var requestState =(HttpWebRequest) ar.AsyncState;
using (var postStream = requestState.EndGetRequestStream(ar))
{}
}

此代码在 EndGetRequestStream 上引发异常:“值不在预期范围内” 我期待您的帮助。

【问题讨论】:

    标签: c# httpwebrequest windows-phone-8 httpclient


    【解决方案1】:

    我认为您收到了ArgumentException: Value does not fall within the expected range,因为您在客户端上启动了BeginGetResponse(),然后在您的回调中执行了EndGetRequestStream(),而您应该调用EndGetResponse()。设置AllowAutoRedirect 工作正常,您只需要修复您的代码。试试这个:

      var client = (HttpWebRequest)WebRequest.Create(connectionUrl);
      client.AllowAutoRedirect = false;
      client.Method = "GET";
      client.BeginGetResponse(Callback, client);
    
      private void Callback(IAsyncResult ar) {
          var state = (HttpWebRequest)ar.AsyncState;
          using (var response = state.EndGetResponse(ar)) {
              var streamResponse = response.GetResponseStream();
              var streamRead = new StreamReader(streamResponse);
              var responseString = streamRead.ReadToEnd();
          }
      }
    

    【讨论】:

      【解决方案2】:

      为什么不将 HttpClient 与 HttpClientHandler 一起使用??

      HttpClientHandler clientHandler = new HttpClientHandler();
      clientHandler.AllowAutoRedirect = false;
      
      // Create an HttpClient using the HttpClientHandler
      HttpClient client = new HttpClient(clientHandler);
      

      更多信息:http://blogs.msdn.com/b/henrikn/archive/2012/08/07/httpclient-httpclienthandler-and-httpwebrequesthandler.aspx

      【讨论】:

      • 哥们,我两年前就问过了。但无论如何,感谢您的帮助
      猜你喜欢
      • 2014-05-12
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多