我试图覆盖从我的服务调用抛出的异常,到我自己的自定义异常。我有两个我想要使用的自定义异常,具体取决于从服务调用返回的StatusCode。可以是500+的ServerException,也可以是400+错误的ClientException。
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。由于某种原因,该示例返回一个Exception对象,其中ApiException作为内部异常。不会返回客户端或服务器异常。
对服务的调用:
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;
}
}
答案 0 :(得分:1)
我认为您的代码会抛出类似
的ApiExceptionresourceManager=nn1:8032,nn2:8032,yarnrm
并在您的代码中
public void foo(){
....
throe new ApiException();
}
你可以使用ExceptionLocator来定位自定义异常或者在Foo()中决定抛出ClientException或ServerException
答案 1 :(得分:0)
您没有定义接受参数的方法
throw new ClientException(
e.StatusCode.ToString(),
e.Message,
e.Uri.ToString(),
e.HttpMethod,
e.Content,
e.StatusCode,
e.InnerException.Message);
您需要班级中的方法,例如
public ClientException(
string StatusCode,
string Message,
string Uri
string HttpMethod,
string Content,
string StatusCode,
string InnerExceptionMessage) : base(...)
{
...
}
或者,您可以使用
public ClientException(params object[] args)
: base(...) { }