ServiceStack如何在ExceptionHandler中抛出真正的httpstatuscode?

时间:2014-03-14 06:08:19

标签: servicestack

我有一个SimplaKeyAuthorizeFilterfilter会抛出401

public SimpleKeyAuthorize(IHttpRequest req, IHttpResponse res, object obj, bool isDebugMode){
    throw new UnauthorizedAccessException("lack sign info!");
}
apphost中的

this.ExceptionHandler = (httpReq, httpRes, operationName, ex) =>{
    DtoUtils.CreateErrorResponse(httpReq, ex, new ResponseStatus() { ErrorCode = ex.ToErrorCode(), Message = ex.Message });
    httpRes.Write(ex.ToErrorCode());
    httpRes.EndRequest(skipHeaders:false);
};

........
this.RequestFilters.Add((req,res,obj)=>{
    new SimpleKeyAuthorize(req,res,obj,false);
});

但是当我打电话给服务时,httpstatuscode是200,不是401,为什么?

  

HTTP / 1.1 200 OK(为什么不是401?)

     

缓存控制:私有

     

Content-Type:text / html;字符集= UTF-8

     

服务器:Microsoft-IIS / 7.5

     

X-AspNet-Version:4.0.30319

     

X-Powered-By:ASP.NET

     

日期:星期五,2014年3月14日05:56:30 GMT

     

内容长度:27

     

UnauthorizedAccessException

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为ServiceStack仅将异常映射到服务范围内的状态代码。

请求绑定和过滤器被认为超出了此范围,这就是它们触发单独的异常处理程序方法的原因。请参阅错误处理文档中的Customized Error Handling部分。

如果您在此处抛出异常,则需要自己设置响应状态代码。

httpRes.StatusCode = HttpStatusCode.Unauthorized;

希望这有帮助。