1

webapi の autofac を設定していないため、API コントローラーの作成でエラーが発生しました。

ただし、どこにも例外をキャッチできないようです。

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Type 'MyWeb.Web.Controllers.MyController' does not have a default constructor
</ExceptionMessage>
<ExceptionType>System.ArgumentException</ExceptionType>
<StackTrace>
at System.Linq.Expressions.Expression.New(Type type) at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
</StackTrace>
</Error>

Elmah に WebApi contrib を追加してみましたが、これを追加しました。

config.Filters.Add(new Elmah.Contrib.WebApi.ElmahHandleErrorApiAttribute());

elmah に例外を登録させませんでした。以下を global.asax に追加しました。

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
}

まったく違いはありませんでした。

コントローラーが呼び出される前に発生したエラーを処理するにはどうすればよいですか?

4

1 に答える 1

1

この例外は HttpResponseMessage のコンテンツに追加されているだけで、実際には例外としてスローされていないのだろうか。コンストラクターのインスタンス化中に使用する依存関係リゾルバー クラスを実装する場合、通常、解決を試み、例外をキャッチし、 を返すことが理にかなっていますnull

たとえば、非 API MVC コントローラーでは、次のようなものをよく使用します

public class UnityDependencyResolver : IDependencyResolver
{
    public readonly IUnityContainer Container;

    public UnityDependencyResolver(IUnityContainer container)
    {
        Container = container;
    }

    #region IDependencyResolver Members

    public object GetService(Type serviceType)
    {
        try
        {
            return Container.Resolve(serviceType);
        }
        catch (Exception ex)
        {
            if (ex.InnerException is TypeInitializationException)
                throw ex.InnerException;

            return null;
        }
    }
    ...
于 2013-07-26T14:41:45.687 に答える