我有一个MVC控制器(不是api控制器)[HttpPost]方法public async Task< string>我正在从客户端向其发出ajax调用的PostDocument().该方法正在对[HttpPost]方法PostDocument(DocRepoviewmodel docRepo)进行另一个API调用.下面是我的代码:
public async Task<string> PostAdminUploadData()
{
HttpResponseMessage response = null;
//set the parameter docRepo (a complex object)
try {
using (var client = new HttpClient())
{
string uri = documentRepositoryApiUrl + Constants.PostDoc;
client.BaseAddress = new Uri(documentRepositoryApiUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
response = await client.PostAsJsonAsync(Constants.PostDoc, docRepo); //docRepo parameter for API method
}
}
catch (Exception ex){}
return (await response.Content.ReadAsAsync<string>());
}
现在在上面的代码中,response = await client.PostAsJsonAsync(Constants.PostDoc,docRepo);代码段成功返回响应var(因为它做了我所期望的操作),但是当上述方法响应时,响应总是陷入错误:在ajax中,我的ajax:
$.ajax({
url: url,
type: 'Post',
data: data,
cache: false,
dataType: 'json',
async: true,
contentType: false,
processData: false,
success: function (data) {
alert("pass");
},
error: function (data) {
alert("field"); //always Failed
}
});
C#的任何地方都不会抛出异常.请帮我解决问题
解决方法:
我遇到了类似的问题.首先,更改您的ajax请求,以便删除dataType并指定contentType:
// dataType: "json",
contentType: "application/json",
然后,尝试将操作的返回类型更改为Task< ActionResult> ;,并使用Controller上的常见方法之一,例如:
return Json(/* valid json string content */)
要么
return Content(/* read content as a string here */)
原因是WebApi控制器获得了一个序列化层,将结果转换为客户端请求的格式.相反,期望MVC控制器调用一种方法,该方法将某种动作结果(通常是视图或类似的结果)返回给视图引擎…
在尝试返回特定模型时,我在JavaScript端收到的只是该对象的Type的完全限定名称.
另一种选择可能是用[AcceptAjax]属性或类似内容装饰您的操作,我相信该属性允许该操作回复ajax请求.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。