【问题标题】:Returning Warnings instead of Errors from Breeze Web API从 Breeze Web API 返回警告而不是错误
【发布时间】:2015-02-22 00:07:23
【问题描述】:

我将 Breeze.js 和 C# WebAPI 与 BreezeController 一起使用。我想更新客户端网页上的实体,将其传递给 WebAPI 进行更新,保存实体,然后发回警告。

[HttpPost]
public SaveResult SaveChanges(JObject saveBundle) {}

有没有办法返回带有警告信息的 SaveResult?不是错误,是警告。

例如,我正在保存居民的年龄。如果年龄小于 50 [这不是错误],我仍然想警告用户,根据我的业务规则,这对于居民来说可能是不正确的年龄。

saveResult.Errors.Add(new EntityError() {
                        PropertyName = "Age",
                        ErrorName = "Warning",
                        ErrorMessage = "The age of the resident is less than 50.  You may want to verify that you entered the correct age."
                    });

如果我这样做(这是我想要的行为):

  • 实体已正确保存。
  • 警告消息在 saveResult 结构中发回。
  • 实体已在服务器上正确更新并与 saveResult 一起发回(即系统生成的我的实体的主键包含新 ID)。

但是(这不是我想要的行为):

  • 在客户端上,实体未更新。即 PK 未更新,实体仍处于挂起状态(未保存)。

我确信我在 SaveResult 中返回错误的事实是问题所在,因为 Breeze.js 可能(正确地)将此解释为错误。但是,我看不到如何使用 Breeze 模型返回警告并且仍然具有所有功能。

顺便说一句,我知道我可以在调用 WebAPI 之前在客户端进行验证,但我希望我的所有验证都在服务器端进行,特别是因为其中一些验证非常复杂。

有什么建议吗?

【问题讨论】:

    标签: c# error-handling warnings breeze


    【解决方案1】:

    目前 breeze 没有与“错误”相对的“警告”概念,但我同意这个概念很有用。您能否将此作为功能请求添加到微风用户语音 (http://breezejs.uservoice.com/) 上,如果它引起足够的兴趣,我们肯定会研究它吗?

    【讨论】:

    • 感谢您的建议。我花时间将其添加为轻而易举的建议。希望这将使其进入下一个版本。同时,知道如何实现吗?
    • 我没有详细考虑过这一点,但您可以为每个 entityType 添加一个名为 say 'warnings' 的未映射属性,并在保存期间在出现警告时将其填充到服务器上。然后这也将被传递回客户端,并且保存将正常完成。
    • 好主意,未映射的属性由微风客户端带回和映射。然后我可以检索警告。
    • 让我知道这是怎么回事。如果效果好,我们也可以向其他人推荐。
    • 我使用未映射的属性实现了警告,该属性在实体基类上实现,由服务器上的所有实体继承。在客户端,我必须为每个实现我的消息属性的实体创建一个 Tor。如果没有 Ctor,控制器将返回未映射的属性,但不会“映射”为剔除属性。通过实现定义属性的Ctor,微风会自动进行映射。剩下的唯一事情就是成功调用微风控制器,检查我的实体是否具有警告属性并显示它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2018-12-23
    • 2021-11-24
    • 2014-05-17
    • 2017-03-13
    • 1970-01-01
    相关资源
    最近更新 更多