2016-05-18 5 views
1

次のコードを使用して404エラーをエラーコントローラ\ viewにキャッチしてリダイレクトします。エラー制御装置においてなぜResponse.StatusCode =(int)HttpStatusCode.NotFoundは私に汎用エラーハンドラを与えますか?

Response.Clear(); 
Server.ClearError(); 
var routeData = new RouteData(); 
routeData.Values["controller"] = "Error"; 
routeData.Values["action"] = "HttpError"; 
routeData.Values["exception"] = exception;   

Response.StatusCode = 500; 
//if http 404 redirect to http404 action 
if (httpException != null) 
{ 
    Response.StatusCode = httpException.GetHttpCode(); 
    switch (Response.StatusCode) 
    { 
     case 404: 
      routeData.Values["action"] = "Http404"; 
      break; 
    } 
} 

私はResponse.StatusCodeを設定している場合=(INT)HttpStatusCode.NotFound私は一般的なエラーハンドラではなく、私が返されるビューを取得します。これは生産時にのみ発生するようです。なぜどんなアイデア?

[AllowAnonymous] 
public ActionResult Http404() 
{ 
    //this line causes generic error handler 
    Response.StatusCode = (int)HttpStatusCode.NotFound; 

    var viewModel = new ErrorViewModel 
    { 
     Description = "Hmm, the page you're looking for can't be found" 
    }; 

    return View("Error", viewModel); 
} 

答えて

0

あなたは、コントローラのアクションメソッドでカスタムStatusCodeを設定し、デフォルトのエラー処理を上書きしたい場合は、以下のいずれかを実行する必要があります。

  • 設定Response.TrySkipIisCustomErrors = trueコントローラメソッドで
  • <system.webServer> <httpErrors existingResponse="PassThrough"></httpErrors> </system.webServer>

  • はあなたのWeb.configファイルに次のように定義します

詳細はこちらhttps://stackoverflow.com/a/22477783/459102

関連する問題