ホームページ >バックエンド開発 >PHPチュートリアル >MVC例外処理に関する問題と解決例

MVC例外処理に関する問題と解決例

零下一度
零下一度オリジナル
2017-06-15 13:45:511151ブラウズ

この記事では、主に MVC例外処理 の関連情報を詳しく紹介します。興味のある方は参考にしてください。例外処理が必要な場所に try catch ブロックを追加する方法があります。ただし、例外処理が必要な場所が多数ある場合は、try catch ブロックが頻繁に記述されることになります。ショートカット。したがって、グローバル例外処理が存在します。そこで、今日は MVC でグローバル例外処理を実行する方法を見ていきます。

1. MVC

Framework独自のグローバル例外処理 MVC では、フレームワークによりグローバル例外処理機能クラス Han

dl

eErrorAttribute クラスのセットが提供されています。このようなコード行は、MVC の App_Start フォルダーにある FilterConfig.cs ファイルにあります

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 {
    filters.Add(new HandleErrorAttribute());
  }

これは、HandleErrorAttribute クラスをインスタンス化し、

filter

に配置するためのものです。次に、[Views] > [Shared] フォルダーに Error.cshtml ページがあります。このページの Model のタイプは、MVC フレームワークがすでに作成したものです。直接。 Error.cshtml ページでは、

エラー情報

を表示するためのさらなる処理を実行し、必要に応じてエラー情報を表示できます。これらのエラー メッセージは、System.Web.Mvc.HandleErrorInfo クラスの特定の プロパティ にあります。 例: 以下は Error.cshtml です。

コントロールに意図的に例外を書きます:

public class HomeController : Controller
  {
    public ActionResult Index()
    {
      string i = "12a";
      int j = Convert.ToInt32(i);
      return View();
    }
  }

それを実行して、結果を見てみましょう。

上記は操作の結果です。System.Web.Mvc.HandleErrorInfo クラスには、直接使用できる豊富な属性がまだ残っていることがわかります。

MVC 独自の例外処理セットは、デフォルトで 500 番台のエラー コードを持つ例外を処理します。404 の場合、これは実行されません。ただし、Web.config ファイルの設定を通じてこれを処理できます。私たちがどのように対処するかをご覧ください。

まず、Error.cshtml ページを完成させ、それにコントロールを追加します。次に、404 を処理するためのビューとコントロールを作成します。次のように

namespace Exception.Controllers
{
  public class SharedController : Controller
  {
    // GET: Shares
    public ActionResult Error()
    {
      return View();
    }

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

ページ:

次に、ブラウザのアドレスに間違ったアドレスを書き込み、結果を確認します:

2. MVC で例外処理を書き換えます

開発中に、多くの場合、このような要件があり、テキスト ログを通じて例外を記録して保存する必要があります。その場合、MVC 独自の例外処理メソッド System.Web.Mvc.HandleErrorInfo にはそのような関数がないため、この関数を書き換えます。次に、書き換え方法を見てみましょう。

まずクラスを構築し、このクラスに

System.Web.Mvc.HandleErrorInfo を継承させ、次に System.Web.Mvc.HandleErrorInfo: OnException メソッドの仮想メソッドをオーバーライドします。

public class CustomHandleErrorAttribute : HandleErrorAttribute
  {
    public override void OnException(ExceptionContext filterContext)
    {
      base.OnException(filterContext);
      var err = filterContext.Exception.Message;//错误内容
      //=============================
      //将错误记录到日志中
      //=============================
    }
  }

次に、FilterConfig.cs を追加します:

public class FilterConfig
  {
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
      filters.Add(new HandleErrorAttribute());
      filters.Add(new CustomHandleErrorAttribute());
    }
  }

このようにして、ニーズを完了できます。

以上がMVC例外処理に関する問題と解決例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。