1

好吧,我为这个话题道歉。我真的不知道该怎么问。

我们的 Web Api 中有一个自定义调度程序,它允许我们根据嵌入在标头中的版本号选择不同的控制器。我们面临的问题是,在这个类中抛出的异常正在由框架静默处理。相反,我们可以捕获异常并尝试处理它,但由于在此级别没有明显的方法来修改默认响应,因此我们所有的处理都会被忽略。

我们目前正在寻求的解决方法基本上是利用这样一个事实,即在抛出此异常时我们正在选择控制器,因此我们希望捕获该异常并将其发送给控制器以进行重新抛出,以便它可以被我们的错误过滤器捕获。听起来很笨拙,但这就是我们正在使用的。我现在正在处理的问题是,我已经让它选择我创建的 ExceptionController 重新抛出,但是我不确定如何将异常对象发送到这个控制器。这是 catch 块的示例:

catch(Exception ex)
{
    var routeValues = request.GetRouteData().Values;
    routeValues["controller"] = "Exception";
    routeValues["action"] = "Exception";
    controllerDescriptor = new HttpControllerDescriptor(_config, "exceptionController", typeof(ExceptionController));

}
return controllerDescriptor;

控制器方法具有以下签名:

[HttpPost]
public void Exception(Exception ex)

我的第一直觉是修改请求正文,它属于 HttpRequestMessage 类型,但我不知道该怎么做。我应该能够在调用 ExceptionController 之前修改该请求。

所以我想问题是,我如何修改请求对象以赋予它异常对象,或者还有其他方法可以解决这个问题吗?

TIA

4

0 回答 0