2013-02-28 9 views
5

MVC4 WebサイトでMagical Unicorn MVC Error Toolkit(v 2.1.2)を設定しようとしていますが、動作させることができません。ここに私のコードです:Magical Unicorn MVCエラーツールキットの設定

のWeb.config

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Error/ServerError"> 
    <error statusCode="404" redirect="~/Views/Error/NotFound.cshtml" /> 
</customErrors> 

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
    <remove statusCode="404" subStatusCode="-1" /> 
    <remove statusCode="500" subStatusCode="-1" /> 
    <error statusCode="404" path="~/Error/NotFound" responseMode="ExecuteURL" /> 
    <error statusCode="500" path="~/Error/ServerError" responseMode="ExecuteURL" /> 
    </httpErrors> 
<system.webServer> 

エラーコントローラ

public class ErrorController : Controller 
{ 
    public ActionResult NotFound() 
    { 
     Response.StatusCode = (int)HttpStatusCode.NotFound; 
     return View(); 
    } 

    public ActionResult ServerError() 
    { 
     Response.StatusCode = (int)HttpStatusCode.InternalServerError; 
     return View(); 
    } 
} 

App_Start(

CustomerErrorHandler.cs [これらは、このhttps://stackoverflow.com/a/7499406/236860ポストに基づいていました] )

using Microsoft.Web.Infrastructure.DynamicModuleHelper; 
using WorldDomination.Web.Mvc; 
using CustomErrors.App_Start; 

[assembly: WebActivator.PreApplicationStartMethod(typeof(CustomErrorHander), "PreStart")] 
namespace CustomErrors.App_Start 
{ 
    public static class CustomErrorHander 
    { 
     public static void PreStart() 
     { 
      // Register the custom error handling module. 
      DynamicModuleUtility.RegisterModule(typeof (CustomErrorHandlingModule)); 
     } 
    } 
} 

IIS Expressを使用してVisual Studio 2012でこのアプリケーションをテストしています。存在しないページに移動しようとするか、例外を呼び出すアクションメソッドに移動すると、デフォルトのブラウザエラーページまたは空白ページが表示されます。

また、上記のコードをASP.NET MVC Custom Error Pages with Magical Unicornで提案されているように変更しましたが、これは何の違いもありません。

この作業を行うには誰でも正しい方向に向けることができます。

答えて

14

最後に、私はMagical Unicorn MVC Error Toolkitを動作させることができませんでした。良いニュースは、私はしなければならないとは思わないということです! MVCアプリケーションをIIS 7.5 Webサーバーにデプロイするので、Web.configの後のsystem.webServer.httpErrorsセクションとカスタムエラーコントローラを使用できます。

のWeb.Config

<system.web> 
    <httpRuntime targetFramework="4.5" /> 
    <compilation debug="false" targetFramework="4.5"> 
    <customErrors mode="Off" /> <!-- IMPORTANT --> 
    ... 
</system.web> 

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
     <remove statusCode="403" /> 
     <error statusCode="403" responseMode="ExecuteURL" path="/Error/AccessDenied" /> 
     <remove statusCode="404" /> 
     <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" /> 
     <remove statusCode="500" /> 
     <error statusCode="500" responseMode="ExecuteURL" path="/Error/ApplicationError" /> 
    </httpErrors> 
    ... 
</system.webServer> 

は、エラーコントローラ

public class ErrorController : Controller 
{ 
    public ActionResult AccessDenied() 
    { 
     Response.StatusCode = (int)HttpStatusCode.Forbidden; 
     Response.TrySkipIisCustomErrors = true; 

     if (Request.IsAjaxRequest()) 
     { 
     // return Json friendly response here 
     } 

     return View(); 
    } 

    public ActionResult NotFound() 
    { 
     Response.StatusCode = (int)HttpStatusCode.NotFound; 
     Response.TrySkipIisCustomErrors = true; 

     if (Request.IsAjaxRequest()) 
     { 
     // return Json friendly response here 
     } 

     return View(); 
    } 

    public ActionResult ApplicationError() 
    { 
     Response.StatusCode = (int)HttpStatusCode.InternalServerError; 
     Response.TrySkipIisCustomErrors = true; 

     if (Request.IsAjaxRequest()) 
     { 
     // return Json friendly response here 
     } 

     return View(); 
    } 
} 
  • このすべては、IIS ExpressおよびIIS 7.5でうまく動作するようです。
  • Elmahは、デフォルトのエラーフィルタを変更せずにエラーをログに記録します。
  • また、Fiddlerは正しいHTTPステータスコードも正しく維持されていることを示唆しています。
+0

http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404-in-asp-net-mvcへの回答で時間を無駄にした後、これは優れたアプローチで、ただの平易な作品です。 –

+0

Michaelさん、ありがとうございました。 – Neilski

関連する問題