如何在Web API控制器上返回Json对象

2021/01/24 15:11 · jquery ·  · 0评论

我在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上完成此操作?

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

谢谢并恭祝安康

如果您创建自己的新HttpContent类来传递JSON,例如...

 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一样。

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

您当然可以通过返回来绕过内容否定HttpResponseMessage在这种情况下,您需要自己将对象序列化为JSON(上面提到的文章中也介绍了这种方法的基础)。

在阅读了tpeczek的答案,Darrel Miller的答案以及tpeczek的答案中的评论后,我想获得有关何时或为什么要使用Web Api及其内容协商机制的更多指导。tpeczek的链接是有用的信息,但我发现其他一些文章更适合将Web Api(及其内容协商)的使用与返回的普通MVC 4控制器操作进行比较JsonResult以下是我认为对做出此类决定有用的内容。一位作者得出的结论是,他更喜欢使用普通的MVC 4控制器,而另一位作者更喜欢使用Web Api控制器:

构建数据的公共HTTP API

我相信以上作者的帖子中需要进行更正。他在那儿提到

“ ...以'Get'开头的每个[Controller]方法都会自动与GET动词相关联。听起来不错吗?确实如此,但这也意味着您不能拥有两个以'Get'开头的方法在同一控制器类中。”

根据此答案,如果指定ActionName属性,则实际上在同一控制器中可以有多个“获取”方法现在这是第二篇文章:

ASP.NET Web API与ASP.NET MVC“ API”

本文地址:http://jquery.askforanswer.com/ruhezaiweb-apikongzhiqishangfanhuijsonduixiang.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!