2014-10-02 149 views
-2

我有一个网站发送一个Ajax请求来检查一个数字的验证。我想使用HttpClient在我的WPF应用程序中发送该请求。如何发送Ajax请求,使用HttpClient

它使用POST方法,这里是请求的URL:http://sim.mci.ir/chk-number-availability

这里是头:

Accept: */* 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.5 
Cache-Control: no-cache 
Connection: keep-alive 
Content-Length: 18 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Cookie: _ga=GA1.2.589400539.1410935105; JSESSIONID=33719B6BDA36C7C23A96B5E73F602B08; _gat=1 
Host: sim.mci.ir 
Pragma: no-cache 
Referer: http://sim.mci.ir/first-step 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0 
X-Requested-With: XMLHttpRequest 

,这里是唯一的价值:

number=09122175567 

我用SendAsync ()和PostAsync()方法,但它不起作用。我认为问题出在请求标题中。

+1

Ajax是一种浏览器技术,在wpf应用程序中,您只是发出http请求。 – 2014-10-02 17:57:34

+0

你为什么低调?!!!对我知道那个。你读过这个问题的内容吗? – 2014-10-02 18:01:21

+2

我不确定你有问题。发布您尝试过的代码并解释它以何种方式“无法使用”,您是否收到错误,预期结果与实际结果有什么关系。 – 2014-10-02 18:06:33

回答

4
HttpClient client = new HttpClient(); 
var content = new FormUrlEncodedContent(new Dictionary<string, string>() { 
    { "number", "09129457000" } 
}); 
client.DefaultRequestHeaders.Referrer = new Uri("http://sim.mci.ir/first-step"); 

var resp = await client.PostAsync("http://sim.mci.ir/chk-number-availability", content); 
var repsStr = await resp.Content.ReadAsStringAsync(); 

这将返回false

0

您无法使用HttpClient发送AJAX请求。如果需要,您可以发送异步HTTP请求。 AJAX是异步JavaScript + XML(它已经变得更广泛,意味着异步JavaScript +其他格式,例如Json),但它仍然是一个涉及JavaScript的浏览器技术。

HttpClient对JavaScript没有任何了解,您必须使用WebBrowser控件来执行JavaScript。

更新:

在这个问题回想起来,我觉得很奇怪,这么多看似有经验的开发者并不了解术语AJAX,并用简单的异步HTTP请求混淆,所以我认为它在这里提供更多信息将有所帮助。

Ajax是短期的同步JA vaScript和X ML,它允许网页发送/经由的XMLHttpRequest小号接收序列化为XML异步数据,然后使用该数据动态地更新页面,而无需重新加载整个页面,全部使用JavaScript完成。

现在,在过去的几年里,XML已经失去了其作为格式数据的事实上的标准和JSON正在它的位置的光泽,而且已经影响到阿贾克斯也一样,你通常会看到JSON格式而不是XML数据当与服务器通信时。所以缩写AJA X不再那么精确了; AJA J被提出,但它的使用并没有变得很普遍,所以人们仍然使用Ajax这个术语,但事实上他们并没有发送/接收XML,但这不是什么大问题,因为这两者本质上非常相似数据格式为:

  • 它仍然涉及JavaScript。
  • 一个网页/应用程序发送/接收异步请求。
  • 支持JavaScript和XMLHttpRequest的Web浏览器。

有了上述背景,我希望它清楚地知道OP在此尝试做什么以及接受的答案,与Ajax几乎没有关系,因为它不涉及上述任何内容点。实际上,它只是一个简单的HTTP请求。

+1

当然你可以做, – 2014-10-02 18:17:43

+1

@ L.B谨慎详细说明?我唯一能想到的就是找出用JavaScript发送/接收的实际请求/响应,并在客户端模仿它们。但由于不涉及JavaScript,因此它们不会再受到_AJAX_请求。 – 2014-10-02 18:26:02

0

好,实际使用HttpClient你不能真正发送AJAX请求,但您可以通过添加XMLHttpRequest要求这样的标题模拟它:

client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest"); 

以下是需要Microsoft.AspNet.WebApi.Client nuget包的帮助方法:

private TResponse CreateHttpRequest<TRequest, TResponse>(Uri uri, TRequest request) 
     where TRequest : class 
     where TResponse : class, new() 
    { 
     using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest"); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      //client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _bearerToken); 
      var response = client.PostAsJsonAsync(uri, request).Result; 
      if (response.StatusCode == HttpStatusCode.OK) 
      { 
       return JsonConvert.DeserializeObject<TResponse>(response.Content.ReadAsStringAsync().Result); 
      } 
      else if(response.StatusCode == HttpStatusCode.Unauthorized) 
      { 
       throw new UnauthorizedException(); 
      } 
      else 
      { 
       throw new InvalidOperationException(); 
      } 
     } 

    }