私は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でこれを行うにはどうすればよいですか?
参考としていくつかの例やURLを教えてください。
よろしく
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で行うように。
ASP.NET Web APIは、少し異なる哲学で機能します。エンティティ(またはエンティティのセット)だけを返す必要があります。コンテンツネゴシエーションメカニズムは、彼が要求した形式でクライアントに返す必要があります。コンテンツネゴシエーションについて詳しくは、こちらをご覧ください。
もちろん、HttpResponseMessage
を返すことにより、コンテンツのネゴシエーションをバイパスできます。この場合、オブジェクトを自分でJSONにシリアル化する必要があります(このアプローチの基本については、上記の記事でも説明しています)。
Tpeczekの回答、Darrel Millerの回答、およびtpeczekの回答でのコメントの会話を読んだ後、Web Apiとそのコンテンツネゴシエーションメカニズムを使用するタイミングまたは理由について、より多くのガイダンスを得たいと思いました。 tpeczekのリンクは有益で便利ですが、Web Apiの使用(およびそのコンテンツネゴシエーション)と、たとえばJsonResult
を返すプレーンなMVC 4コントローラーアクションとの比較に適した他の記事がいくつか見つかりました。そのような決定を下すのに役立ったと思うものを以下に示します。著者の1人は、プレーンMVC 4コントローラーの使用を好む一方で、他の著者はWeb Apiコントローラーの使用を好むと結論付けています。
上記の著者の投稿には修正が必要だと思います。そこで彼はそれについて言及している、
「...「Get」で始まるすべての[Controller]メソッドは、自動的にGET動詞に関連付けられます。それはすばらしいですね。しかし、名前が「Get」で始まる2つのメソッドを使用できないことも意味します。同じコントローラクラスに。」
この回答によると、ActionName
属性。次に、2番目の投稿を示します。