2014-03-14 13 views
0

我有一個SimplaKeyAuthorizeFilter,在filter,將在APPHOST扔401ServiceStack如何在ExceptionHandler中拋出真正的httpstatuscode?

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

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

的Cache-Control:私人

的Content-Type:(爲什麼不是401?)的text/html;字符集= UTF-8

服務器:Microsoft-IIS/7.5

X-ASPNET-版本:4.0.30319

X供電,通過:ASP.NET

日期:週五, 2014年3月14日5點56分三十○秒GMT

的Content-Length:27

UnauthorizedAccessException

回答

1

發生這種情況是因爲ServiceStack只將異常映射到服務範圍內的狀態碼。

請求綁定和過濾器被視爲超出此範圍,這就是爲什麼它們會觸發單獨的異常處理程序方法。請參閱錯誤處理文檔中的Customized Error Handling部分。

如果你在這裏拋出一個異常,你將需要自己設置響應狀態碼。

httpRes.StatusCode = HttpStatusCode.Unauthorized; 

希望這會有所幫助。

相關問題