2

私はAsp.net mvc3アプリケーションに取り組んでいます。例外処理のために、global.asaxで次のコードを使用しています

    protected void Application_Error(object sender, EventArgs e)
    {
        Exception exception = Server.GetLastError();
        Response.Clear();
        HttpException httpException = exception as HttpException;
        Server.ClearError();
        Response.Redirect("/Secure/Error", false);
    }

例外が発生した場合は、エラー ページにリダイレクトされます。一部の例外がエラー ページにリダイレクトされないようにしたいと考えています。

ユーザーが次のURLを入力した場合のように

www.example.com/index

「インデックス」名のコントローラはありません。例外がスローされます

パス '/index' のコントローラーが見つからないか、IController を実装していません

この例外が発生したときに、www.example.comにリダイレクトする必要があります。

これどうやってするの?

index..のような他のキーワードがあり、ウェブサイトのメイン URL にリダイレクトする必要があります。

4

1 に答える 1

1

特定のキーワードに対してのみこれを実行したい場合は、404-Not Found例外を処理する代わりに、対応するルートを追加してみませんか?

これは、 Globals.asax.csファイルの、他のルート定義の横で行うことができます。

routes.MapRoute(
    "IndexRoute", // Route name
    "index", // URL 
    new { controller = "Home", action = "RedirectToRoot" }
    );

同様に、インデックス以外のすべてのキーワードについても同様です。

アップデート

/ indexと他のURLが(または選択した別のコントローラー/アクション)を指すようにした後HomeController.RedirectToRoot()、それを実装して、ユーザーをサイトのルートに誘導するRedirectResultを返します。

public RedirectResult RedirectToRoot()
{
    return RedirectToAction("Index", "Home");
}

アップデート2

ルートへのリダイレクト以外に/indexやその他の特別なURLを使用しないことが絶対に確実な場合は、代わりに永続的なリダイレクトを行うことができます。

return RedirectToActionPermanent("Index", "Home");

これにより、サーバーへのラウンドトリップが節約されますが、リダイレクトはクライアントブラウザーに永続的に保存されるため、将来、これらのURLを他の目的で使用することは非常に困難/不可能になります。

于 2013-02-19T15:14:09.923 に答える