私はコントローラへの呼び出しにエラーを返そうとしていました。このリンククライアントが適切なアクションを取れるようにするためです。コントローラは、jQuery AJAX 経由で JavaScript によって呼び出されます。ステータスをエラーに設定しなかった場合のみ、Json オブジェクトが返されます。サンプル コードは次のとおりです。
if (response.errors.Length > 0)
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(response);
ステータス コードを設定しないと、Json が取得されます。ステータス コードを設定すると、ステータス コードは返されますが、Json エラー オブジェクトは返されません。
アップデートAjax のエラー コールバックを処理できるように、エラー オブジェクトを JSON として送信します。
ベストアンサー1
私が見つけた最も優れた解決策は、元の実装を拡張し、HttpStatusCode を指定できる独自の JsonResult を作成することです。
public class JsonHttpStatusResult : JsonResult
{
private readonly HttpStatusCode _httpStatus;
public JsonHttpStatusResult(object data, HttpStatusCode httpStatus)
{
Data = data;
_httpStatus = httpStatus;
}
public override void ExecuteResult(ControllerContext context)
{
context.RequestContext.HttpContext.Response.StatusCode = (int)_httpStatus;
base.ExecuteResult(context);
}
}
これをコントローラーアクションで次のように使用できます。
if(thereWereErrors)
{
var errorModel = new { error = "There was an error" };
return new JsonHttpStatusResult(errorModel, HttpStatusCode.InternalServerError);
}