0

WebApi Preview 5(WCFの一部であった場合)を使用して開発されたプロジェクトを、WebApiの最終リリース(MVC4の一部)に移行しています。プロセスを説明するドキュメントがありますが、それは非常に単純であり、ほとんどの問題をカバーしていません。

今私が直面している問題の1つは、GlobalErrorHandlerがHttpErrorHandlerから継承し、 OnTryProvideResponseをオーバーライドすることによって作成され、Elmahでエラー処理をフックするために使用されたことです。これで、次のような行でAppStartに登録されました。

var configuration = new WebApiConfiguration();
//some other configuration for security and CreateInstance
configuration.ErrorHandlers = 
(handlers, endpoint, description) => handlers.Add(new GlobalErrorHandler())
};
//then some registration
RouteTable.Routes.MapServiceRoute<SomeObject>("routeName", configuration);

次に、この構成に別のルートをマッピングします。このコードはすべて、MVC4 WebApiの新しい世界では機能しません。HttpErrorHandler間に競合があり、そのメンバーを適切に実装することさえできないようです。

ElmahをWebApiに登録する方法に関する一般的な投稿を見てきましたが、可能な限り元のコードに固執しようとしています。Microsoftが持っていたものと直接同等のものがあると思います。プレビューバージョンと最終バージョンでリリースされたもの。だから私の質問:

  1. ASP.NET MVC4 WebApiでのこのグローバルエラー処理登録に相当するものは何ですか?
  2. ここで行うのと同じ方法で構成を行う必要がありますか(デフォルトのwebapiサンプルプロジェクトには同様のコードがないようです)
  3. そのルート登録行のコードに相当するものは次のとおりです。RouteTable.Routes.MapServiceRoute( "routeName"、configuration);
4

1 に答える 1

0

Visual Studio で簡単な 1 回限りの WebApi MVC プロジェクトを作成すると、登録を処理するための静的メソッドを持ついくつかのクラスを含む App_Start フォルダーが表示されます。具体的には次のとおりです。

  • FilterConfig.cs
  • WebApiConfig.cs

WebApi Config は、ルートなどを登録する必要がある場所です...

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

フィルター構成は、グローバルエラーを処理するために必要なものです...フィルター構成には、スワップアウトまたはスワップアウトできるデフォルトのエラーハンドラー属性が追加されています

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

Global.asax は、これらの静的登録スクリプトを次のように呼び出します。

 protected void Application_Start()
    {

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

    }

Elmahに関しては、Nugetパッケージを含めるだけで登録されるようです...

パッケージ Elmah.Mvc を探します

PM> Install-Package Elmah.MVC

ELMAH を ASP.NET MVC [HandleError] 属性で動作させるにはどうすればよいですか? しかし、今このブログによると、それは変更されました:

内部の HandleErrorAttribute ASP.NET MVC で ELMAH を使用しようとした場合、この例に示すように、独自の HandleErrorAttribute を実装している可能性があります。このカスタム コードを Elmah.MVC に適用する必要はなくなりました。パッケージをインストールするとすぐに、HandleError 属性はパッケージに既に含まれているため、安全に削除できます。

これは Web.Config に managedHandler として登録されているように見えるため、コードで Elmah を直接参照する必要はありません。

于 2012-10-18T12:29:47.873 に答える