我已将breezejs从版本1.4.1更新为1.4.4。对于服务器端验证,我在ContextProvider上处理AfterSaveEntitiesDelegate并抛出EntityErrorsException()。
在发行说明中我读到:
Breeze WebApi对任何具有的SaveChanges操作的响应 验证错误现在返回403状态代码,而不是200。 这对任何Breeze代码都没有影响,但任何人都会注意到 看Breeze的网络流量。
但是,新的403错误没有关于验证错误的任何详细信息或任何表明它是验证错误的内部异常。相反,错误是:“处理HTTP请求导致异常。有关详细信息,请参阅此异常的'Response'属性返回的HTTP响应。”没有“响应”属性。此外,现在我的客户端代码不再“理解”此错误。
答案 0 :(得分:2)
事实证明,此异常不会被捕获并包装到HttpResponseMessage中。我的BreezeController SaveChanges()api的代码是:
try
{
return Request.CreateResponse(HttpStatusCode.OK, _commDataService.SaveChanges(pSaveData, shouldValidate));
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex);
}
这是返回正确的异常但是使用了错误的状态代码(更新的breezejs客户端代码所预期的500而不是403。
我添加了一个新的catch来传递breeze构造的响应消息:
catch (System.Web.Http.HttpResponseException responseException)
{
//todo: logger call.
return responseException.Response;
}