[解決済み] ASP.NET MVCのアクションからHTTP 404レスポンスを送信する適切な方法は何ですか?
質問
ルートが与えられたら。
{フィード名}/{アイテムパーマリンク}。
ex: /ブログ/ハローワールド
項目が存在しない場合、404を返したいです。ASP.NET MVCでこれを行うには、正しい方法は何ですか?
どのように解決するのですか?
カウボーイ・コーディング(cowboy coding ;-))で、私はこのようなことを提案します。
コントローラです。
public class HomeController : Controller
{
public ActionResult Index()
{
return new HttpNotFoundResult("This doesn't exist");
}
}
HttpNotFoundResultです。
using System;
using System.Net;
using System.Web;
using System.Web.Mvc;
namespace YourNamespaceHere
{
/// <summary>An implementation of <see cref="ActionResult" /> that throws an <see cref="HttpException" />.</summary>
public class HttpNotFoundResult : ActionResult
{
/// <summary>Initializes a new instance of <see cref="HttpNotFoundResult" /> with the specified <paramref name="message"/>.</summary>
/// <param name="message"></param>
public HttpNotFoundResult(String message)
{
this.Message = message;
}
/// <summary>Initializes a new instance of <see cref="HttpNotFoundResult" /> with an empty message.</summary>
public HttpNotFoundResult()
: this(String.Empty) { }
/// <summary>Gets or sets the message that will be passed to the thrown <see cref="HttpException" />.</summary>
public String Message { get; set; }
/// <summary>Overrides the base <see cref="ActionResult.ExecuteResult" /> functionality to throw an <see cref="HttpException" />.</summary>
public override void ExecuteResult(ControllerContext context)
{
throw new HttpException((Int32)HttpStatusCode.NotFound, this.Message);
}
}
}
// By Erik van Brakel, with edits from Daniel Schaffer :)
このアプローチを使用すると、フレームワークの標準に準拠することになります。そこにはすでに HttpUnauthorizedResult があるので、後であなたのコードをメンテナンスする別の開発者の目には、これは単にフレームワークを拡張することになります (あなたの住む場所を知っている精神異常者のことです)。
このアプローチが何かを見逃しているかどうかわからないので、HttpUnauthorizedResult がどのように達成されるかを見るためにアセンブリを調べるために reflector を使用できます (ほとんど単純すぎるようです)。
私はちょうど今HttpUnauthorizedResultを見てみるためにreflectorを使用しました。彼らは、応答の StatusCode を 0x191 (401) に設定しているようです。401の場合はうまくいくのだが、404を新しい値として使うと、Firefoxでは空白のページが表示されるだけになってしまうようだ。Internet Explorerでは、デフォルトの404が表示されます(ASP.NETバージョンではありません)。Webdeveloperツールバーを使って、FFのヘッダーを検査したところ、404 Not Foundレスポンスが表示されました。単に私がFFで間違って設定したものである可能性があります。
とは言うものの、Jeff のアプローチは KISS の良い例だと思います。このサンプルで冗長性を必要としないのであれば、彼の方法も同様にうまく機能します。
関連
-
[解決済み] クライアントから危険な可能性のあるRequest.Formの値が検出された
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] ASP.NET MVCのビューを文字列としてレンダリングする方法は?
-
[解決済み】ASP.NET MVCでクライアントのIPアドレスを取得するにはどうすればいいですか?
-
[解決済み】ASP.NET MVC - コントローラーからApp_Dataフォルダーの絶対パスを検索する
-
[解決済み] [Solved] ASP.NET MVCで404を適切に処理するには?
-
[解決済み] MVCのアクションが404を返すようにする方法
-
[解決済み] ASP.NET MVCのカスタム404エラーページのルーティング
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
.netcoreプロジェクトでIStartupFilterを使用するためのチュートリアル
-
ASP.NET Core 6で依存関係を解決する3つの方法
-
pythonでpillowをインストールする3つの方法
-
ASP.NET Core Dependency Injectionフレームワークの活用
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ASP.NET MVCコントローラは、Imageを返すことができますか?
-
[解決済み] Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\"), Server.MapPath("/"). この違いは何ですか?
-
[解決済み] ASP.NETの新しいセキュリティ脆弱性の深刻度と回避方法について教えてください。
-
[解決済み] Visual Studio 新しいブラウザを開けない
-
[解決済み] WatiNかSeleniumか?[クローズド]