我有一个网站发送Ajax请求来检查数字的验证。我希望使用HttpClient在我的WPF应用程序中发送该请求。
它使用post方法,这里是请求网址: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()方法,但它不起作用。我认为问题出在请求标题中。
答案 0 :(得分:6)
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
字符串
答案 1 :(得分:1)
好吧,实际上你不能使用HttpClient
发送真正的AJAX请求,但你可以通过添加XMLHttpRequest
来请求头像这样来模拟它:
client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
这是一个需要Microsoft.AspNet.WebApi.Client
nuget包的Helper方法:
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();
}
}
}
答案 2 :(得分:0)
您无法使用HttpClient发送AJAX请求。如果需要,可以发送异步HTTP请求。
AJAX是异步JavaScript + XML(它已经变得更广泛,意味着异步JavaScript +其他格式,例如Json),但它仍然是一种涉及JavaScript的浏览器技术。
HttpClient
对JavaScript一无所知,你必须使用WebBrowser控件来执行JavaScript。
<强>更新
回顾这个问题,我发现很多看似有经验的开发人员不理解AJAX这个术语并将其与简单的异步HTTP请求混淆,这让我感到非常惊讶,所以我认为在这里提供更多信息会很有帮助
Ajax是 A 同步 JA vaScript和 X ML的简称,它允许网页发送/接收异步数据通过 XMLHttpRequest 序列化为 XML ,然后使用该数据动态更新页面,而无需重新加载整个页面,这些都是使用 JavaScript
现在,在过去的几年里,XML已经失去了光彩,因为事实上的格式化数据标准和 JSON 正在取而代之,而且这也影响了Ajax,你通常会看到格式化为与服务器通信时,JSON而不是XML。所以缩写AJA X 不再那么精确了;建议使用AJA J ,但它的使用并没有普及,所以人们仍然使用Ajax这个术语,实际上他们并没有发送/接收XML,但这并不是什么大问题,因为这两者基本上都非常与数据格式化方式类似:
根据上述背景,我希望清楚OP在这里尝试做什么,以及接受的答案,与Ajax几乎没有关系,因为它不涉及上述任何一点。事实上,它只是一个简单的HTTP请求。