2

ASP.net 3.5 および MVC 1.0 で作業しています。

私がやりたいことは、カスタム エラー ページ内で、404 エラーを生成する要求された URL を返すことです。Google がエラー ページ ( http://www.google.com/test ) で行うのと同じように。

例えば。

申し訳ありませんが、要求されたアドレス " http://www.domain.com/nonexistantpage.aspx " はこのサーバーに存在しません。

この種のソフト 404 を達成するための最良の方法は何でしょうか?

また、補足として:ブラウザーのアドレス バーに要求された URL を保持しながら、醜い ...notfound?aspxerrorpath=/awdawd ナンセンスの代わりにカスタム エラー ページを返すことに慣れている人はいますか? ...server.transfer と何か関係があると思いますか?

4

1 に答える 1

0

このトピックに関連する次のリソースを確認してください。

要約すると、特定のコントローラー アクションを実行するキャッチオール ルートを定義することで、要求された URL を維持しながら Google のような実装を実現できます。

//defined below all other routes
routes.MapRoute(
    "Catch All",
    "{*path}", 
    new { controller = "Error", action = "NotFound" }
);

public ActionResult NotFound(string path)
{
    Response.StatusCode = (int)HttpStatusCode.NotFound;
    ViewData["path"] = path; //or Request.Url.ToString() if you want full url
    return View();
}

ただし、これは完全な解決策ではありません。デフォルトのルート マッピングを残していると仮定すると、一致するものはすべて{Controller}/{action}/{id}従来の 404 またはカスタム エラーをスローします。キャッチオール ルートが特定のコントローラー/アクションまたはパラメーター タイプにマップされていないものをすべてピックアップするようにしたい場合は、すべての可能なルートを明示的に定義する必要があります。これは必ずしも簡単なタスクではありません。

于 2009-11-25T15:57:45.170 に答える