2017-03-14 47 views
0

我正在使用RESTier 0.6.0库,并且希望在删除它之前对资源执行一些检查。在检查失败的情况下,我抛出异常来停止删除操作。但是,我用来实例化异常的错误消息并未在最高级别推出。从Visual Studio提供Web API时,我只能将该消息视为内部异常。有没有办法让这个错误消息在最高级别推出?RESTier提交逻辑,将错误消息推送到顶层

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."); 
    } 
} 

目前OnDelete内抛出的任何异常提交在EntityFrameworkApi结果逻辑方法中,看起来像这样的错误:

{ “错误”:{ “代码”:“”,“消息“:“发生了错误。” } }

...这对客户来说并不特别有用。

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

非常感谢帮助!

回答

0

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

设置IncludeErrorDetailPolicy财产上的HttpConfiguration 类是这样的:

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always 

Structure of error received by client

看到这个职位:OData controller returns different error for local and different for remote machine