当前位置: 首页 > 知识库问答 >
问题:

ServiceStack如何在ExceptionHandler中抛出真正的http状态代码?

沃阳飙
2023-03-14

我有一个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);
});

但是当我调用服务时,http状态码是200,不是401,为什么?

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

缓存控制:专用

内容类型:text/html;字符集=utf-8

服务器:Microsoft IIS/7.5

X-AspNet-Version:4.0。30319

X-Powerd-By: ASP. NET

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

内容-长度: 27

未授权访问例外

共有1个答案

法浩壤
2023-03-14

出现这种情况是因为ServiceStack仅将异常映射到服务范围内的状态代码

请求绑定和筛选器被认为在此范围之外,这就是它们触发单独异常处理程序方法的原因。请参阅错误处理留档中的自定义错误处理一节。

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

httpRes.StatusCode = HttpStatusCode.Unauthorized;

希望这有帮助。

 类似资料:
  • 我希望根据响应对象错误动态返回HTTPStatus代码,如400、400、404等。我被提到这个问题--使用Spring3RESTful以编程方式更改http响应状态,但没有帮助。 我有一个带有方法的控制器类 是一个类,其中有上面使用的两个方法(和)。 我不想签入if条件并相应地返回响应代码,有没有其他更好的方法来做到这一点?

  • 嗨,我正在使用Hibernate和Postgresql尝试一个简单的Spring MVC CRUD应用程序。我得到了下面的异常 例外: POM.xml文件 在WEB-INF下 网状物xml文件 spring-servlet.xml文件 com.bean包下的EmployeeBean类 com.controller下的EmployeeController类 com下的EmployeeDao类。dao

  • 问题内容: 我想记录301s和302s,但是找不到在Client.Do,Get,doFollowingRedirects,CheckRedirect中读取响应状态代码的方法。我是否必须自己实施重定向才能实现这一目标? 问题答案: 该类型允许您指定自定义传输方式,这应允许您执行后续操作。应该执行以下操作: (如果仅支持链接到默认传输,则可以稍微简化一下)。 然后,您可以使用此传输方式创建客户端,并记

  • 我想尝试一个简单的程序,但出现以下错误。我正在使用Eclipse Kelper和Tomcat 7.0。我尝试了很多东西,但都不管用。 有源代码: > web.xml: servlet-context.xml: 有人能解释一下问题出在哪里吗?

  • 这可能看起来很愚蠢,但是我试图在Axios中请求失败时获取错误数据。 是否可以获取一个可能包含状态代码和内容的对象,而不是字符串?例如:

  • 问题内容: 我们正在使用Flask作为我们的API之一,我只是想知道是否有人知道如何返回HTTP响应201? 对于诸如404之类的错误,我们可以致电: 但是对于201我得到 LookupError:201都不例外 我是否需要创建自己的例外,像这样的文档? 问题答案: 你可以在这里阅读。