私のサービスコールからスローされた例外を、自分のカスタム例外にオーバーライドしようとしています。私はサービスコールから返されたStatusCodeに応じて、使いたい2つのカスタム例外を持っています。 500以上のServerExceptionまたは400以上のエラーのClientExceptionです。新しいカスタムexpectionでスローされた例外をオーバーライドします。
catch (ApiException e)
{
if ((int)e.StatusCode >= 400 && (int)e.StatusCode < 500)
{
throw new ClientException(e.StatusCode.ToString(), e.Message, e.Uri.ToString(), e.HttpMethod, e.Content, e.StatusCode, e.InnerException.Message);
}
else
{
throw new ServerException(e.StatusCode.ToString(), e.Message, e.Uri.ToString(), e.HttpMethod, e.Content, e.StatusCode, e.InnerException.Message);
}
}
この例でキャッチしたApiExceptionを無効にする必要があります。何らかの理由で、この例では内部例外としてApiExceptionを持つExceptionオブジェクトが返されます。クライアントまたはサーバーの例外を返しません。
サービスへの呼び出し:
catch(ClientException e)
{}
catch(ServerException e)
{}
catch (ApiException e)
{}
catch (Exception e)
{
//Always caught here only
}
ClientExceptionクラス、読みやすくするために短縮:あなたは何のメソッドが定義されていない
public class ClientException : Exception
{
public string Code { get; private set; }
public string ReasonPhrase { get; private set; }
public ClientException(string code, string message) : base(message)
{
Code = code;
ReasonPhrase = message;
}
}
非同期のカプセル化方法はありませんか? –
サービスコールにrefitを使用しているため、サービスコール自体は非同期ですが、コールを保持するメソッドではありません。 – cfl
実際に例外をキャッチしていますか? – FINDarkside