2012-04-07 13 views
0

これは単純で、すでに答えられていなければなりませんが、何時間も無駄にしています。間違ったアドレスにエラーページを表示する方法を理解できません。また、リダイレクトするのではなく、URLを保持したいと考えています。私はCustomErrors、HttpErrors、Application_Errorの多くの組み合わせを試しましたが、存在しないコントローラでは何も動作しません.HttpErrorsに応じて、私はいつもIIS 404.0ページを取得するか、空の404応答のみを取得します。 IIS 7.5、MVC上で実行すると、私はそこに他のルートの秋と一致しないすべての要求を確実にするために、次のルートを使用3.ASP.NET MVCアプリケーション用の404ページ

+0

[ASP.NET MVCで404を適切に処理するにはどうすればいいですか?](http://stackoverflow.com/a/2577095/189950)これは価値があるのですが、これが私のアプローチです。それはintiially設定する*深刻な* PIAであり、それは実際に過度に複雑に見える(と私はそれがだと思う傾向がある) - **しかし** ...それは素晴らしい作品、非常に柔軟性がありますあなたが望むものを正確に得る。 –

+0

Thxキャップ。カーク;)私はそれを試してみるが、IMHOそれは一般的なシナリオのためにあまりにも複雑です... – user1318555

+0

そのうまく、そのリンクで提供される*多くの*ソ​​リューションがあります。あなたが可能な最も簡単な解決策を探しているなら、それは[これもまたカバーされています](http://stackoverflow.com/a/5507125/189950)。 –

答えて

0

解決策がどこにあるのか覚えていません。 まず、あなたがのErrorController作成:

public class ErrorController : Controller 
{ 
    // 
    // GET: /Error/ 
    public ActionResult Index() 
    { 
     return RedirectToAction("Index", "Home"); 
    } 

    public ActionResult Generic() 
    { 
     Exception ex = null; 
     try 
     { 
      ex = (Exception)HttpContext.Application[Request.UserHostAddress.ToString()]; 
     } 
     catch { } 

     return View(); 
    } 

    public ActionResult Error404() 
    {    
     return View(); 
    } 
} 

第二に、開いているグローバルなファイルを、次のコードを追加:あなたのWebConfigで

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 
    Application[HttpContext.Current.Request.UserHostAddress.ToString()] = ex; 
} 

第三に、変更customerrorをしかし、ここでエラーを処理するコードです:

<customErrors mode="Off" defaultRedirect="/Error/Generic"> 
    <error statusCode="404" redirect="/Error/Error404"/> 
</customErrors> 

その他:もう1つのエラーレイアウトを作成しました。それは物事をもっとはっきりさせます。 :)

希望します。

0

、あなたは非常に簡単にそのケースを扱うことができます。最後の(含ま

 // this route is intended to catch 404 Not Found errors instead of bubbling them all the way up to IIS. 
     routes.MapRoute(
      "PageNotFound", 
      "{*catchall}", 
      new { controller = "Error", action = "NotFound" } 
     ); 

地図他の文の後のその文)。

+0

Thx Nico、実際にスヌーズURLを使用しています。キャッチがすべてあるかどうかを確認します。 – user1318555

+0

これは多くのシナリオでは機能しません。アクションが見つからなくても、多くのルートが一致します!それらは技術的に404です。これが私のコメントでアプローチを推奨した理由です。 (すべてのシナリオを扱う多面的なソリューションの1つのコンポーネントとしてこのソリューションを同時に使用するわけではありません) –

+0

@Kirk:このマッピングのポイントは、コントローラとアクションに一致する要求を確実にすることです。与えられたコントローラやアクションが存在することを保証するものではありません。私の例では、私は実際には私のエラーコントローラにNotFoundアクションを持っていません。今はIISにバブルするのではなく、自分でこのエラーを処理できます。 – bevacqua

関連する問題