エラーが発生した場合にユーザーをリダイレクトしないでください。代わりに、失敗したリクエストのレスポンス本文を返します。エラーページにリダイレクトする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");
}