我有一个SimplaKeyAuthorizeFilter
,filter
会抛出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
答案 0 :(得分:1)
这种情况正在发生,因为ServiceStack仅将异常映射到服务范围内的状态代码。
请求绑定和过滤器被认为超出了此范围,这就是它们触发单独的异常处理程序方法的原因。请参阅错误处理文档中的Customized Error Handling部分。
如果您在此处抛出异常,则需要自己设置响应状态代码。
httpRes.StatusCode = HttpStatusCode.Unauthorized;
希望这有帮助。