23

我在我的 asp.net 控制器上使用下面的代码在我的 javascript 上的 Ajax 上返回 Json 对象

public JsonResult myMethod()
{
    // return a Json Object, you could define a new class
    return Json(new
    {
        Success = true, //error
        Message = "Success" //return exception
    });
}

jQuery-Ajax:

$.ajax({
    type: "POST",
    url: url_ ,
    data: search,
    success: function(data) {   
        //Show Json Properties from Controller ( If Success == false show exception Message from controller )
        if (data.Success)  
        {
            alert(data.Message); //display success 
        }
        else
        {
            alert(data.Message) //display exception
        }
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert("error: " + XMLHttpRequest.responseText);
    },
    dataType: 'json'
});

这如何在 Web Api Controller 上完成?

你能给我一些例子或网址作为参考。

谢谢并恭祝安康

4

3 回答 3

30

ASP.NET Web API 的工作原理略有不同。您应该只返回一个实体(或一组实体),内容协商机制以客户请求的格式将其返回给客户。您可以在此处阅读有关内容协商的更多信息:

您当然可以通过返回一个HttpResponseMessage. 在这种情况下,您需要自己将对象序列化为 JSON(这种方法的基础知识也在上面提到的文章中进行了描述)。

于 2013-01-09T09:35:46.817 回答
25

如果您为自己创建一个用于传递 JSON 的新 HttpContent 类,例如...

 public class JsonContent : HttpContent {

    private readonly MemoryStream _Stream = new MemoryStream();
    public JsonContent(object value) {

        Headers.ContentType = new MediaTypeHeaderValue("application/json");
        var jw = new JsonTextWriter( new StreamWriter(_Stream));
        jw.Formatting = Formatting.Indented;
        var serializer = new JsonSerializer();
        serializer.Serialize(jw, value);
        jw.Flush();
        _Stream.Position = 0;

    }
    protected override Task SerializeToStreamAsync(Stream stream, TransportContext context) {
        return _Stream.CopyToAsync(stream);
    }

    protected override bool TryComputeLength(out long length) {
        length = _Stream.Length;
        return true;
    }
}

那么你可以这样做,

      public HttpResponseMessage Get() {
            return new HttpResponseMessage() {
                Content = new JsonContent(new
                {
                    Success = true, //error
                    Message = "Success" //return exception
                })
            };
        }

就像你对 JsonResult 所做的那样。

于 2013-01-09T14:41:07.630 回答
10
于 2013-07-29T15:22:57.213 回答