web-dev-qa-db-ja.com

ASP.NET MVC 3からHTTPステータスコードを設定する方法

フロントエンドでOpenWeb jsライブラリを使用しており、特定のタイプのエラーが発生したときに.NET中間層に特定のHTTPヘッダーステータスコードを送信する必要があります。私はこれを行うことでそれを達成しようとしました:

public ActionResult TestError(string id) // id = error code
{
    Request.Headers.Add("Status Code", id);
    Response.AddHeader("Status Code", id);
    var error = new Error();
    error.ErrorID = 123;
    error.Level = 2;
    error.Message = "You broke the Internet!";

    return Json(error, JsonRequestBehavior.AllowGet);
}

それは中途半端に働いた。スクリーンショットを参照してください: httpステータスコードhttp://zerogravpro.com/temp/pic.png

応答ヘッダーでステータスコード400を達成しましたが、要求ヘッダーで400が本当に必要であることに注意してください。代わりに、「200 OK」が表示されます。どうすればこれを達成できますか?

呼び出しを行うためのURL構造は単純です:/ Main/TestError/400

50
HerrimanCoder

ASP.NET MVCアクションからHTTP 404応答を送信する適切な方法は何ですか?

あなたがしたいことはResponse.StatusCodeヘッダーを追加する代わりに。

public ActionResult TestError(string id) // id = error code
{
    Response.StatusCode = 400; // Replace .AddHeader
    var error = new Error();  // Create class Error() w/ prop
    error.ErrorID = 123;
    error.Level = 2;
    error.Message = "You broke the Internet!";

    return Json(error, JsonRequestBehavior.AllowGet);
}
95
Steve Czetty

返されるのがエラーコードだけである場合は、次の操作を実行できます。

public ActionResult TestError(string id) // id = error code 
{ 
      return new HttpStatusCodeResult(id, "You broke the Internet!");
}

参照: Mvc.HttpStatusCodeResultに関するMSDN記事

それ以外の場合、他の情報を返したい場合は

Response.StatusCode = id

の代わりに

Response.AddHeader("Status Code", id); 
61
Nick Jones

JSONの結果をビューに取得できない場合は、これを追加してみてください:

Response.TrySkipIisCustomErrors = true;

この前に :

Response.StatusCode = 400;

この投稿の詳細: https://stackoverflow.com/a/37313866/92231

0
Ludo.C