servicestack,Jquery,Http,servicestack" /> servicestack,Jquery,Http,servicestack" />

Jquery 使用服务器端异步时,ServiceStack禁止(403)错误作为内部服务器错误(500)返回

Jquery 使用服务器端异步时,ServiceStack禁止(403)错误作为内部服务器错误(500)返回,jquery,http,servicestack,Jquery,Http,servicestack,我有一个删除实体的简单请求。在实现中,当无法删除HttpError时,我抛出一个状态为403(禁止)的HttpError。如果我使服务器实现异步,那么使用JQuery我会得到一个HTTP500(内部服务器响应),而不是使用同步实现得到的预期403响应 public object Delete(DeleteEntity request) { ... throw new HttpError(System.Net.HttpStatusCode.Forbidden, "Cannot de

我有一个删除实体的简单请求。在实现中,当无法删除HttpError时,我抛出一个状态为403(禁止)的HttpError。如果我使服务器实现异步,那么使用JQuery我会得到一个HTTP500(内部服务器响应),而不是使用同步实现得到的预期403响应

public object Delete(DeleteEntity request)
{
    ...
    throw new HttpError(System.Net.HttpStatusCode.Forbidden, "Cannot delete entity because...");
}
通过此同步实现,我得到以下响应:

HTTP/1.1 403 Forbidden
Cache-Control: private
Content-Type: text/plain; charset=utf-8
Server: Microsoft-IIS/8.0
X-Powered-By: ServiceStack/4.07 Win32NT/.NET
X-Powered-By: ServiceStack/4.07 Win32NT/.NET
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcU2t5RHJpdmVcRG9jdW1lbnRzXFRlY2hNRFxDb2RlXEFwcGxpY2F0aW9uc1xDQUNcQ0FDLldlYkFwcGxpY2F0aW9uXGFwaVxBcmVhc1wx?=
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Date: Mon, 03 Feb 2014 10:28:14 GMT
Content-Length: 283
HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcU2t5RHJpdmVcRG9jdW1lbnRzXFRlY2hNRFxDb2RlXEFwcGxpY2F0aW9uc1xDQUNcQ0FDLldlYkFwcGxpY2F0aW9uXGFwaVxBcmVhc1wx?=
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Date: Mon, 03 Feb 2014 10:16:12 GMT
Content-Length: 5978
相同的服务方法但异步:

public async Task<object> Delete(DeleteEntity request)
{
    ...
    throw new HttpError(System.Net.HttpStatusCode.Forbidden, "Cannot delete entity because...");
}

这是设计还是一个bug?另一个附带问题是,是否有办法使用JQuery检索异常消息(无需解析jqxhr.responseText字符串并从html文档中提取标题)?

这是ASP.NET/IIS中的错误处理问题,请参阅:

您可以通过注册请求前筛选器在ServiceStack中添加建议的解决方法,例如:

this.PreRequestFilters.Add((httpReq, httpRes) => {
    var aspRes = httpRes.OriginalResponse as System.Web.HttpResponseBase;
    if (aspRes != null) 
        aspRes.TrySkipIisCustomErrors = true;
});

这并不能解决问题。使用async时抛出403时,我仍然得到500分。TrySkipIisCustomErrors已为true。@GuyGodin能否发布原始HTTP响应(使用WebInspector或Fiddler),以便我们查看此错误响应是由ServiceStack还是ASP.NET生成的?@GuyGodin ok cool,应在中修复。更新NuGet后是否可以重试。