0

次の投稿で Darin の回答を参照しています。

私は MVC3 を使用していますが、これがまだエラーを処理する方法であるかどうか疑問に思っていましたか?

エラーコントローラーには、次のものがあります。

public ActionResult Http404()
{
     Response.StatusCode = 404;

     return Content("404", "text/plain");
}

彼のコードから作業..完全な URL を表示したいのですが、どうすればよいですか? www.mywebsite.com/Error/Http404だけでなく、そうである必要がありwww.mywebsite.comます。どうすればいいですか?次のコードがある場合、完全な URL が表示されると思いましたが、それでも www.mywebsite.com が表示されるだけです。

public ActionResult Http404()
{
     Response.StatusCode = 404;

     return View("Http404");
}

このページに表示される global.asax.cs に設定された ex の値を取得するにはどうすればよいですか?

クエリ文字列に aspxerrorpath が含まれていたため、web.config でエラーを処理することから離れました。

4

2 に答える 2

0

試しましたか: http://community.codesmithtools.com/CodeSmith_Community/b/tdupont/archive/2011/03/01/error-handling-and-customerrors-and-mvc3-oh-my.aspx

このサンプルは、エラー ページにリダイレクトしませんが、エラーが発生した場所で要求された URL を表示し続けます。それがあなたを助けることを願っています。

于 2012-04-23T08:54:32.193 に答える
0

したがって、私の理解では、ユーザーを例外の特定のエラーページにリダイレクトしたり、例外にアクセスしたいエラーページからリダイレクトしたりしたいと考えています。

これが私が試したもので、ベースコントローラーを作成し、OnExceptionメソッドをオーバーライドしました。メソッドの中OnExceptionで、私はあなたがGlobal.asax.cs.

最も重要なのは、例外を処理した後RedirectAction、のResultプロパティにa を設定していることですExceptionContext

また、エラー ビューから にアクセスするためにException、例外を に保存しましたTempData。から、例外をインスタンスとしてビューにErrorController渡しています。HandleErrorInfo

これが完全なコードです。

// BaseController
public class BaseController : Controller
{
  protected override void OnException(ExceptionContext filterContext)
  {
    if (!filterContext.ExceptionHandled)
    {
      var action = "General";

      if (filterContext.Exception is HttpException)
      {
        var httpException = filterContext.Exception as HttpException;

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

      filterContext.Result = RedirectToAction(action, "error");
      TempData["error"] = new HandleErrorInfo(filterContext.Exception, 
                          RouteData.Values["controller"].ToString(), 
                          RouteData.Values["action"].ToString());
      filterContext.ExceptionHandled = true;
    }
  }
}

// Error Controller
public class ErrorController : Controller
{
  public ActionResult Error404()
  {
    return View(TempData["error"] as HandleErrorInfo);      
  }

  // other methods
}

// Sample controller derives from BaseController.
public class HomeController : BaseController
{
  public ActionResult Index()
  {
    return View();
  }

  public ActionResult NotFound()
  {
    throw new HttpException(404, "Not Found");
  }
}

// Error404.cshtml
@model System.Web.Mvc.HandleErrorInfo
@{
  ViewBag.Title = "404 Not Found";
}
<h2>@ViewBag.Title</h2>

<p>
  Last Exception: @Model.Exception
</p>

更新:このアプローチの欠点の 1 つは、HTTP 例外 404、500、またはコントローラー アクションからのみスローされた場合は何でも処理できることです。

于 2012-04-23T12:36:22.013 に答える