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'
});

これはWebApiコントローラーでどのように実行できますか?

参考までに例やURLを教えてください。

よろしくお願いします

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 に答える