【发布时间】:2015-06-23 01:05:55
【问题描述】:
我在我的 MVC 应用程序中使用 Breeze.js 和 Q.js。
我目前在我的 webApi 上有一个操作
public IQueryable<Myobject> doMyAction()
这可以做两件事:
- 返回对象集合(如果允许用户)
- 抛出 HTTP 异常(如果不允许用户)(它可能不是“未经授权”,这只是一个示例)
抛出新的 HttpResponseException(Request.CreateResponse(HttpStatusCode.Unauthorized, "Not Allowed"));
var query = EntityQuery.from('doMyAction');
// execute the query
dcCore.manager.executeQuery(query)
.then(querySucceeded)
.fail(dcCore.queryFailed);
如果用户被授权并且逻辑正确,那么我连接到我的数据库并返回一个很好的 Myobject() 列表,一切都很好。
但是,如果我抛出异常说他们未经授权,那么在控制台中我会得到我的 401(未经授权)和消息:
[Q] 未处理的拒绝原因(应为空):
这发生在它到达 .fail() 函数之前。
我还尝试在整个执行位周围放置一个 try/catch,希望我能捕获一个错误,但没有运气。
我可以看到为什么理论上会发生这种情况,因为我没有返回 executeQuery 所期望的东西(事实上,我根本没有返回,我正在扔!),但是,
-实际问题
我应该如何处理从 webApi 返回的错误,而不做像扩展模型这样的事情?
我还没有尝试的唯一方法是让我的 Web API 返回一种动态或通用对象,但这并不是最好的解决方案。
【问题讨论】:
标签: javascript asp.net asp.net-web-api breeze q