質問

Global.asax.vbでしようとしていることは次のとおりです。

Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
        routes.MapRoute( _
            "Error", _
            "error.html", _
            New With {.controller = "Error", _
                      .action = "FriendlyError"} _
        )
        ...
        'other routes go here'
        ...
    End Sub

    Sub Application_Start()
        RegisterRoutes(RouteTable.Routes)
    End Sub

    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        ...
        'code here logs the unhandled exception and sends an email alert'
        ...
        Server.Transfer("http://www.example.com/error.html")
    End Sub

End Class

しかし、Server.Transferは失敗します:

  

子リクエスト「http://www.example.com/error.html」の無効なパス。仮想パスが必要です。

これを修正するにはどうすればよいですか?または、これを行うためのより良い方法は何ですか?

役に立ちましたか?

解決

Scott Hanselmanのブログこちら ELMAH は、コードを変更せずに使用できるエラーロガー/ハンドラです。 MVCでうまく動作するようですので、調べてみてください。

他のヒント

ELMAH は、未処理の例外をキャッチするための優れたエラーハンドラです。 HttpModulesを介してWebアプリケーションにシームレスにプラグインし、通知とログのさまざまなオプションがあります。

機能:

  • SQL、XML、SQLite、InMemoryロギング
  • メール通知
  • RSSフィード
  • 詳細!例外のロギング
  • 簡単な統合
  • エラーシグナル-「うまくダイイングしている」ときにエラーのエラーハンドラーにシグナルを送信します。ユーザー向け

また、参考までに、SOはELMAHを使用しますが、フォークされたバージョンです。これは最高のアーキテクチャの説明およびセットアップチュートリアル

仮想パス、つまりアプリケーションベースへの相対パス(つまり、アプリの外部パスがない)を指定する必要があるため、次のようになります。 Server.Transfer(" error.html") または Server.Transfer(" /error.html") または Server.Transfer("〜/ error.html")

デフォルトでは、ASP.NET MVCアプリケーションには、Shared / Error.aspxビューがあり、これを継承しています

System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>

コントローラーが属性[HandleError]を使用している場合、すべての例外はキャッチされるまでバブルし続け、そのページで終了します。

インラインPage_Loadを追加しただけです(この場合は行末なので有効です):

<script runat="server">
  Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs)
    MyExceptionHandlerService.LogException("exceptionsource", this.Model.Exception)
  End Sub
</script>

その後、フレンドリーな「申し訳ありません...」メッセージ。 ELMAHはより堅牢であるように見えますが、私のニーズにはこれで十分でした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top