0

我正在使用 RESTier 0.6.0 库,并希望在删除资源之前对其进行一些检查。如果检查失败,我会抛出异常来停止删除操作。但是,我用来实例化异常的错误消息并没有在最高级别推出。从 Visual Studio 提供 Web API 时,我只能将消息视为内部异常。有没有办法让这个错误消息在最高级别推出?

protected void OnDeletingGw_Pack(Gw_Pack pack)
{
    var trades = ModelContext.Gw_PackJunction.Where(e => e.PackID == pack.PackID).ToList();

    if (pack.Groupage == true || trades.Count > 1)
    {
            // Don't delete a pack if it is a groupage container or if it's associated with more than one Trade.
            throw new Exception("The container you are trying to delete is either marked as groupage or is functioning as a groupage container in another file.");
    }
}

目前,在 EntityFrameworkApi 中的 OnDelete 提交逻辑方法中抛出的任何异常都会导致如下所示的错误:

{ "error":{ "code":"","message":"发生错误。" } }

...这对客户不是特别有用。

更新:我在 RESTier 文档MkDocs 版本中指出,给出了一个抛出 ODataException(而不是异常)的示例。我在代码中更改了这一点,但发布的 Restier 服务返回的错误对象仍然只有基本的“发生错误”信息。

非常感谢您的帮助!

4

1 回答 1

0

当在 RESTier EntityFrameworkApi(例如内部和OnUpdate<EntitySet>方法)中抛出异常时,异常被反序列化为内部异常(internalexception)的一部分。因此,为了查看 RESTier API 中引发的任何异常,需要...

在 HttpConfiguration 类上设置 IncludeErrorDetailPolicy 属性,如下所示:

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always

客户端收到的错误结构

请参阅此帖子:OData 控制器为本地机器返回不同的错误,为远程机器返回不同的错误

于 2017-04-19T14:21:18.060 回答