Javascript NET中的ajaxpost
我有以下javascript AJAX请求,它可以工作:Javascript NET中的ajaxpost,javascript,jquery,.net,ajax,Javascript,Jquery,.net,Ajax,我有以下javascript AJAX请求,它可以工作: $.ajax({ type: "POST", url: requestUrl, data: { var1: 'value1', var2: 'value2', var3: 'value3' }, xhrFields: { withCredentials: true }, dataType: "json", cro
$.ajax({
type: "POST",
url: requestUrl,
data: {
var1: 'value1',
var2: 'value2',
var3: 'value3'
},
xhrFields: {
withCredentials: true
},
dataType: "json",
crossDomain: true,
complete: function (jqXhr, textStatus) {
if (jqXhr !== undefined && jqXhr !== null && jqXhr.statusText === "OK") {
alert("Request Success" + jqXhr.responseText);
} else {
alert("Request Failed" + (jqXhr.responseText || textStatus));
}
}
});
我想用.NET做同样的事情
我尝试了以下方法:
string result = string.Empty;
try
{
using (var client = new WebClient())
{
client.Credentials = new NetworkCredential("userName", "password");
var values = new NameValueCollection();
values["var1"] = "value1";
values["var2"] = "value2";
values["var3"] = "value3";
var response = client.UploadValues(requestUrl, values);
result = Encoding.Default.GetString(response);
}
}
catch (Exception exception)
{
Console.WriteLine("Error=" + exception.Message);
}
Console.WriteLine("result=" + result);
但是,我得到一个内部服务器错误
如何重新创建跨域请求?是否要设置特定的标题
WebException详细信息:
响应:“远程服务器返回错误:(500)内部服务器错误。”
标题:
持久身份验证:true
内容长度:5143
缓存控制:专用
内容类型:text/html;字符集=utf-8
日期:2015年7月14日星期二12:03:21 GMT
服务器:Microsoft IIS/7.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET如果看不到错误,很难说到底发生了什么,但如果您怀疑这是CORS问题,则可以添加以下标题:
var data = JsonConvert.SerializeObject(
new
{
Prop1 = 1,
Prop2 = "data 2"
});
using (var client = new WebClient { UseDefaultCredentials = true })
{
client.Headers.Add("access-control-allow-origin", "*");
client.Headers.Add("access-control-allow-methods", "GET, POST, OPTIONS");
client.Headers.Add("access-control-allow-headers", "Authorization, content-type, accept");
client.Headers.Add(HttpRequestHeader.ContentType, "application/json; charset=utf-8");
client.UploadData("your url", "POST", Encoding.UTF8.GetBytes(data));
}
服务器错误说明了什么?我没有访问服务器的权限。它是由另一个开发团队托管的服务。请使用Fiddler2之类的工具手动尝试该服务,以创建请求并查看服务器实际接受的内容。或者,您可以在
$.ajax
请求中设置错误处理程序,并检查其返回的属性。不管怎样,你都无法在不知道问题是什么的情况下解决任何问题。@TrueBlueAussie-我有Fiddler2,我可以看到请求在AJAX中通过。我应该注意什么标题?我试过了,但没用。NET代码的Fiddler在500之前显示了两个401。凭据似乎未通过:401-未经授权:由于凭据无效,访问被拒绝您知道服务器使用的身份验证类型(基本、承载令牌等)吗?您发送凭据的方式是使用基本身份验证,但您所联系的服务器可能需要更多。同样,在ajax代码中,您发送的是json,但在C代码中,您发送的是名称-值对。确保发送一个json对象,并将其添加到标题:“内容类型”、“应用程序/json”。我尝试将数据发送为json,并将内容类型设置为“应用程序/json”,但遇到了相同的错误。IIS服务器承载的网站已启用windows身份验证。由于这是windows身份验证,请尝试以下操作:client.Credentials=CredentialCache.DefaultCredentials;或者在using语句中:using(var client=new-WebClient{usedaultcredentials=true})尝试了DefaultCredentials并得到了相同的错误。我已经更新了问题中的错误和标题