Asp.net mvc 控制器httpresponsemessage正常,但ajax总是触发fail方法

Asp.net mvc 控制器httpresponsemessage正常,但ajax总是触发fail方法,asp.net-mvc,json,jquery,asp.net-web-api,httpresponse,Asp.net Mvc,Json,Jquery,Asp.net Web Api,Httpresponse,我遇到了一个奇怪的问题 我使用的是MVC(不是web api),因此控制器继承自controller,而不是ApiController 我用ajax调用一个控制器操作(POST),该操作返回HttpResponseMessage 这是我得到的答复: {"readyState":4,"responseText":"StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StringContent, He

我遇到了一个奇怪的问题

我使用的是MVC(不是web api),因此控制器继承自controller,而不是ApiController

我用ajax调用一个控制器操作(POST),该操作返回HttpResponseMessage

这是我得到的答复:

{"readyState":4,"responseText":"StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StringContent, Headers:\r\n{\r\n  Location: /\r\n  Content-Type: application/json; charset=utf-8\r\n}","status":200,"statusText":"OK"}
但是,当ajax接收到数据时,它会触发fail方法

这是ajax函数:

$.ajax({
    url: "someurl",
    type: "post",
    data: data,
    dataType: "json",
    contentType: "application/json; charset=utf-8"
}).done(function (data) {
    alert(data.responseText);
    window.location.href = "redirect to some url";
}).fail(function (data) {
    alert("error");<-- this one is called even when i set HttpStatusCode.OK
    alert(JSON.stringify(data));
}).always(function () {
});
如果我对webapi控制器执行相同的ajax调用(内部使用相同的C#代码),它将获得成功。有什么区别


谢谢

您不能将HttpResponseMessage与MVC操作一起使用。WebAPI和MVC是两种不同的框架,你不能把它们混为一谈。

如果有人还在看的话,请回答我的问题。我同意之前的帖子,因为MVC不会返回实际内容。相反,我用

 public async Task<string> GetAjaxCollateralSummary(string id)
{
//your logic
  return JsonConvert.SerializeObject(result);
}

and the in my js page I have following code:

  $.post(url, { id: '2' })
                    .success(function (response) {
                        console.log(response);
                        var jsondResult = JSON.parse(response);                      
                    }
                        )
                .error(function (err) {
                    console.log("Error while trying to get data from MVC controller  ");
                    console.log(err);
                })
公共异步任务GetAjaxCollateralSummary(字符串id) { //你的逻辑 返回JsonConvert.SerializeObject(结果); } 在我的js页面中,我有以下代码: $.post(url,{id:'2'}) .成功(功能(响应){ 控制台日志(响应); var jsondResult=JSON.parse(响应); } ) .error(函数(err){ log(“尝试从MVC控制器获取数据时出错”); 控制台日志(err); })
是否有其他选择?如果您的应用程序无法添加任何web api控制器,并且仅限于普通的MVC控制器,该怎么办?@ncbl要在MVC中写出正文,您可以使用context.Response.Write(…)我认为这不再适用于.net core,因为MVC和WebAPI是结合在一起的
 public async Task<string> GetAjaxCollateralSummary(string id)
{
//your logic
  return JsonConvert.SerializeObject(result);
}

and the in my js page I have following code:

  $.post(url, { id: '2' })
                    .success(function (response) {
                        console.log(response);
                        var jsondResult = JSON.parse(response);                      
                    }
                        )
                .error(function (err) {
                    console.log("Error while trying to get data from MVC controller  ");
                    console.log(err);
                })