0

既存の MVC Web アプリケーションの URL が物理的に存在しません (つまり、MyMVCSite/mypage.aspx です。無効な aspx がユーザーによって入力された場合、「エラー ページ」にページをリダイレクトする必要があります。

-) MVCSite/InvalidePage --> エラーページにリダイレクト MVCSite/error

-) MVCSite/InvalidePage.aspx --> ページ MVCSite/InvalidePage.aspx としてホームページにリダイレクト

最後の条件も Page MVCSite/error にリダイレクトする必要がありますしたがって、この条件は、URL が物理的に存在しないため、ここでも機能しないため、私によっても試行されます...

protected void Application_BeginRequest(object sender, EventArgs e)
{ 
    if (sUrl.EndsWith(".aspx"))
    { 
        string[] path = sUrl.Split('/');
        if (!System.IO.File.Exists(Server.MapPath("test.aspx")))
        Response.Redirect("error");
    } 
}

さらに、Global.asax の Application_Error イベントで 404 例外を適用できません。この例外が何度も発生するため、404 のチェックも行われます - ファイルが存在しない理由は、いくつかの画像である可能性があり、css ファイルが現在見つからない可能性があります非常に見つけにくい

protected void Application_Error()
{
    if (objException.Message != "File does not exist.") { //..... } 
}

Web.configにもカスタムエラーを適用していますが、これも機能しません

<customErrors mode="Off">
    <error statusCode="404" redirect="Error/Index" />
</customErrors>

現在、エラー ページはアクション名が間違っている場合にのみ発生しますが、ページ名が間違っている場合は、間違った URL のホームページにリダイレクトされ ます。この問題を解決するために、他の多くのオプションを使用してアドバイスしてください。

4

2 に答える 2

2

このリンクを見てください、これはきっと役に立ちます

http://devstuffs.wordpress.com/2010/12/12/how-to-use-customerrors-in-asp-net-mvc-2/を見てください

URLにはmvc-2と記載されていますが、すべてのバージョンで同様です

これも

http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute.aspx

Global.asax ファイルで処理する場合

そのための新しいルートを作成する代わりに、コントローラー/アクションにリダイレクトして、クエリ文字列を介して情報を渡すことができます。例えば:

protected void Application_Error(object sender, EventArgs e) {
  Exception exception = Server.GetLastError();
  Response.Clear();

  HttpException httpException = exception as HttpException;

  if (httpException != null) {
    string action;

    switch (httpException.GetHttpCode()) {
      case 404:
        // page not found
        action = "HttpError404";
        break;
      case 500:
        // server error
        action = "HttpError500";
        break;
      default:
        action = "General";
        break;
      }

      // clear error on server
      Server.ClearError();

      Response.Redirect(String.Format("~/Error/{0}/?message={1}", action, exception.Message));
    }

次に、コントローラーは必要なものを受け取ります。

// GET: /Error/HttpError404
public ActionResult HttpError404(string message) {
   return View("SomeView", message);
}

あなたのアプローチにはいくつかのトレードオフがあります。この種のエラー処理でのループには十分注意してください。もう 1 つのことは、asp.net パイプラインを経由して 404 を処理するため、これらすべてのヒットに対してセッション オブジェクトを作成することです。これは、使用頻度の高いシステムでは問題 (パフォーマンス) になる可能性があります。

GlobalASAX ソリューション ソース

于 2013-10-11T05:30:27.340 に答える
0

現在、「customErrors」がオフになっています。これはオンにする必要があります。

<customErrors mode="Off">
  <error statusCode="404" redirect="Error/Index" />
</customErrors>

また、リダイレクトの別の方法は、コントローラー コード内で応答が null に等しくないかどうかを確認することです。以下の例を参照してください。

if (userId == null)
{
  return RedirectToAction("Error404", "Error");
}
else
{
  //Process the request
}
于 2013-10-11T09:44:00.087 に答える