jQueryのAJAXからのHttpContextをゲット
-
20-09-2019 - |
質問
私のプロジェクトでは、MVCフレームワークとして城モノレールを利用しています。問題は、モノレールがすべてのコントローラは、ビューテンプレートを持っていることを必要とすることです。私は、AJAX呼び出しを経由して戻って、コントローラ上のメソッドから文字列を取得しようとしています。モノレールは、ビューテンプレートを見つけることができないので、AJAXのGETが常にサーバーから500エラーを返します。
:私はあなただけ(これはビューコントローラを見つけること気にしないようにモノレールを信号)voidにコントローラメソッドの戻り値の型を設定してからのようなものをやっている回避策の他の例を見てきましたContext.Response.OutputStream.Write(buffer, 0, buffer.Length);
ちょうど画面にコンテキストを書き込みます。
だから私は、次の方法を持っているとjQueryのAJAX GET経由で返される文字列を取得しようとしています。誰かが助けることはできますか?
public void Note(string id)
{
if (!string.IsNullOrEmpty(id))
{
if (notesProvider.HasNote(id))
{
return "{status:'200', text: '" + notesProvider.GetNote(id).Body + "'}";
}
else return "{status:'404', text: 'Could not find the Note by provided id [" + id + "]'}";
}
else return "{status:'500', text: 'Illegal request : a note id must be provided'}";
}
}
どのように私はこの戻り空間を作るとのHttpContextを経由して戻り値を読み取る必要がありますか?
解決
すべての派生モノレールコントローラは、「CancelView()」と呼ばれる方法へのアクセス権を持っています。あなたはビューテンプレートを使用せずに戻したいメソッド内で、このメソッドを実行します。
他のヒント
あなたはそのためJsonReturnBinderを使用することができます:
[return:JSonReturnBinder]
public object Note(string id)
{
if (!string.IsNullOrEmpty(id))
{
if (notesProvider.HasNote(id))
{
return new {status=200, text= notesProvider.GetNote(id).Body };
}
else return new {status=404, text="Could not find the Note by provided id [" + id + "]" };
}
else return new {status =500, text="Illegal request : a note id must be provided" };
}
洗練提案ます:
なぜレスポンスボディの一部としてステータスコードを返しますか?任意の応答でHttpStatusCodeフィールドがあります。希望のコードに設定すると、(あなたが直接のXMLHttpRequestでステータスコードを検査することができ、ほとんどのJSライブラリは成功とエラーハンドラを捧げている)を使用するクライアントコードが簡単になります、プラスあなたの方法は、目的の文字列を返しますので、ユニットテストずっと容易になるだろう。例:
[return:JSonReturnBinder]
public string Note(string id)
{
if (!string.IsNullOrEmpty(id))
{
if (notesProvider.HasNote(id))
{
return notesProvider.GetNote(id).Body;
}
else
{
Response.StatusCode = 404;
return "Could not find the Note by provided id [" + id + "]";
}
}
else
{
Response.StatusCode = 500;
return "Illegal request : a note id must be provided";
}
}
もう一つの提案 - シャッフル/他のブロックが入れ子のレベルを低減する場合:
[return:JSonReturnBinder]
public string Note(string id)
{
if (string.IsNullOrEmpty(id))
{
Response.StatusCode = 500;
return "Illegal request : a note id must be provided";
}
if (notesProvider.HasNote(id) == false)
{
Response.StatusCode = 404;
return "Could not find the Note by provided id [" + id + "]";
}
return notesProvider.GetNote(id).Body;
}
この方法では、コードは、セーフガード(前提条件)で始まり、そして方法の最後のreturnステートメントは、通常の実行完了を表しています。 IMOそれは読み物事が容易になります。