3

プロジェクトにカスタム エラー機能を実装しました。ローカル IIS では動作しますが、ライブ サーバーでは動作しません。Global.asax ファイルを使用してこの機能を実装し、MVC のカスタム エラー コントローラーでカスタム エラー アクション メソッドを呼び出しています。私はローカル IIS で公開して実行しましたが、うまく動作しますが、ライブ サーバーでは動作します。

私の Global.asax.cs ファイル

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    //do not register HandleErrorAttribute. use classic error handling mode
    filters.Add(new HandleErrorAttribute());
}

protected void Application_Error(Object sender, EventArgs e)
{
    LogException(Server.GetLastError());

    CustomErrorsSection customErrorsSection = (CustomErrorsSection)ConfigurationManager.GetSection("system.web/customErrors");
    string defaultRedirect = customErrorsSection.DefaultRedirect;
    if (customErrorsSection.Mod e== CustomErrorsMode.On)
    {
        var ex = Server.GetLastError().GetBaseException();

        Server.ClearError();
        var routeData = new RouteData();
        routeData.Values.Add("controller", "Common");
        routeData.Values.Add("action", "CustomError");

        if (ex is HttpException)
        {
            var httpException = (HttpException)ex;
            var code = httpException.GetHttpCode();
            routeData.Values.Add("status", code);
        }
        else
        {
            routeData.Values.Add("status", 500);
        }

        routeData.Values.Add("error", ex);

        IController errorController = new Test.Controllers.CommonController();
        errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
    }
}

私のカスタムエラーコントローラーとそのアクションメソッド

public ActionResult CustomError(int status, Exception error)
{
    var model = new CustomErrorModel();
    model.Code = status;
    model.Description = Convert.ToString(error);
    Response.StatusCode = status;
    return View(model);
}

それで、私は何をすべきですか?

4

2 に答える 2

1

2つのアプローチ

ルート方法

// We couldn't find a route to handle the request. Show the 404 page. 
routes.MapRoute("Error", "{*url}", new { controller = "Error", action = "CustomError" } );

また

Web.config のカスタム エラー ハンドラー:

<customErrors mode="On" >
    <error statusCode="404" redirect="~/CatchallController/CustomError" />
</customErrors>   

ルート マッチングなしによって発生する条件は 404 です。このようにして、すべての不一致を~/CatchallController/CustomError

于 2013-01-24T05:37:42.997 に答える