servicestack中的ExceptionHandler(在被覆盖的AppHostBase的Configure方法中设置)具有'异常' lambda中泛型异常类型的参数。
this.ExceptionHandler = (httpReq, httpResp, operationName, exception) =>
{
if(exception is ArgumentException)
{
// some code
}
}
在lambda中,如果异常是ArgumentException
类型,我希望添加一个特定的条件。
有没有办法确定抛出哪种特定类型的异常?
用'检查类型是'关键字无效,因为此link
仅供参考,我们使用的servicestack实例实现了自定义ServiceRunner。
答案 0 :(得分:0)
导致ArgumentException
的代码是
return serializer.Deserialize(querystring, TEMP);
由于某种原因,在ArgumentException
ExceptionHandler
this.ExceptionHandler = (httpReq, httpResp, operationName, exception) =>
{
httpResp.StatusCode = 500;
bool isArgEx = exception is ArgumentException; // returns false
if(isArgEx)
{
//do something
}
}
虽然如链接中所述(请参阅问题),但可以使用is
关键字识别 InnerException 。
因此,应用的解决方案是将ArgumentException
作为内部异常抛出,如下所示:
public const string ARG_EX_MSG = "Deserialize|ArgumentException";
try
{
return serializer.Deserialize(querystring, TEMP);
}
catch(ArgumentException argEx)
{
throw new Exception(ARG_EX_MSG, argEx);
}
因此,现在ExceptionHandler
代码是:
this.ExceptionHandler = (httpReq, httpResp, operationName, exception) =>
{
httpResp.StatusCode = 500;
bool isArgEx = exception.InnerException is ArgumentException; // returns true
if(isArgEx)
{
//do something
}
}