1

ASP.NET MVC 4 アプリケーションがあり、すべての HTTP 400 エラーをカスタム エラー ページにリダイレクトしたいと考えています。HTTP 400 エラーは 404 エラーのように処理されませんが、解決策を見つけるために何時間も検索していました。400 (不正な要求エラー) をエスケープする方法、つまり URL などで特殊文字を使用できるようにする方法を示す多くのソリューションがあります。しかし、例外をキャッチするための解決策を見つけることができませんでした。

何らかの方法ですべての HTTP の不正なリクエストをキャッチし、それらをエラー ページにリダイレクトするのを手伝ってください。

4

2 に答える 2

5

エラーが発生した場合にユーザーをリダイレクトしないでください。代わりに、失敗したリクエストのレスポンス本文を返します。エラーページにリダイレクトするIIS(およびASP.NET)の機能は、根本的に間違っており、HTTP仕様に反していると思います(元のリクエストではなく、エラーページリソース自体に対してエラーが返されるため) . また、それが Web ブラウザーの場合、ユーザーは再試行する方法がありません。ページをリロードすると、元の失敗した要求を再試行せずにエラー ページが再び返されるためです。

ともかく...

HTTP 400 応答は、アプリケーション コードによって生成される必要があります。これは、自動的に行われるものではありません。通常、不適切なリクエストは、HTTP リクエストに必要な値がないか、不正な形式の値が含まれていることを、人間以​​外のエージェント (つまり、 Web ブラウザではなく Web サービス クライアント) に通知する場合に使用されます。

次のように、すべてのコントローラーの基本コントローラー クラスを用意することで、MVC でこれを行うことができます。

public abstract class BaseController : Controller {

    protected ActionResult Http400(String message) {

        Response.StatusCode = 400;
        return View(message); // you need to define a view file called "Http400.aspx" (or cshtml if you're using Razor) in your application's shared views folder
    } 

}

したがって、アプリケーションロジックで:

public ActionResult Foobar() {

    if( IsBadRequest() ) return Http400("Bad request, try again");
}
于 2013-03-08T20:21:34.113 に答える
0

これをweb.configに追加するのと同じくらい簡単なことをすることができます

 <customErrors mode="RemoteOnly">
  <error statusCode="400" redirect="errorpage.html"/>
</customErrors>
于 2013-03-08T20:20:18.360 に答える