2014-12-05 115 views
0

我试图添加一个自定义消息与我的Web服务的HTTP错误响应。我希望是这样的:ServiceStack自定义HTTP响应添加消息和错误代码

The remote server returned an error: (406) Not Acceptable. Custom message: {ErrorCode: 2, Error: "No Username"}

我尝试这样做:

throw new HttpError(System.Net.HttpStatusCode.NotAcceptable, "No Username"); 

而且这样的:

string ErrorMessage = "ErrorCode = 2, Error = No Username"; 
throw new HttpError(406, ErrorMessage); 

而且这样的:

var responseDto = new UserCreatedResponse { ErrorCode = 2, Error = "No Username" }; 
        return new HttpResult(responseDto, HttpStatusCode.NotAcceptable) 
        { 
         StatusDescription = "Computer says no", 
        }; 

我跟着serviceStack文档https://github.com/ServiceStack/ServiceStack/wiki/Customize-HTTP-Responses但我不明白,我只得到Http错误“远程服务器返回错误:(406)不可接受。”但不是自定义消息。 我误解了一些东西吗? 谢谢

回答

1

你的第一个例子是正确的,例如,这里是为CustomHttpErrorService

public class CustomHttpError 
{ 
    public int StatusCode { get; set; } 
    public string StatusDescription { get; set; } 
} 

public class CustomHttpErrorResponse 
{ 
    public string Custom { get; set; } 
    public ResponseStatus ResponseStatus { get; set; } 
} 

public class CustomHttpErrorService : Service 
{ 
    public object Any(CustomHttpError request) 
    { 
     throw new HttpError(request.StatusCode, request.StatusDescription); 
    } 
} 

测试实现,你可以从部署站点http://test.servicestack.net

这确实返回预期的响应状态代码和说明测试:

HTTP/1.1 406 CustomDescription 
Cache-Control: private 
Content-Type: application/json; charset=utf-8 
Vary: Accept 
Server: Microsoft-IIS/8.5 
X-Powered-By: ServiceStack/4.00 Win32NT/.NET 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS 
Access-Control-Allow-Headers: Content-Type 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Fri, 05 Dec 2014 22:41:23 GMT 
Content-Length: 449 

这适用于IIS,IIS Express以及所有ServiceStack Self Hosts。但不幸的是VS.NET Web开发服务器不支持设置自定义状态描述。

+0

嗨@mythz,我试图锻炼如何使用你的服务,我很抱歉,但我没有看到发送错误信息接收......错误信息的要点。请告诉我,如果我错过了这一点。我在想的是和错误处理程序,它将分析发布的数据并发送各种错误的不同描述。我把我的代码放在GitHub上,你可以看到我尝试发送相同的HTTP代码和每个错误情况的不同描述。有链接:https://github.com/SuperBulot/Custom_response/commit/c87c56868df516129d9b3fc586cd56ce89ec2c85 感谢您的帮助 – Ben 2014-12-18 12:41:07

+0

@Ben上述服务表明,抛出一个'HttpError'服务确实工作如预期的自我托管和大多数ASP.NET Web服务器,但不会在VS WebDev服务器中工作,因为它不允许设置自定义的StatusDescription。 – mythz 2014-12-18 16:16:27

+0

我知道,我正在使用ASP.NET Web服务器uder IIS 8.1。我想我会在经典的DTOs响应中添加我的ErrorCode和错误描述。无论如何感谢 – Ben 2014-12-18 17:04:28

-1

我不知道我是否能正确回答你

你可以尝试这样的事情

抛出新HttpError。 (点后,它会告诉你几个错误)

HttpError.NotFound(“地方自定义消息在这里”)

HttpError.Conflict(“地方自定义消息在这里”)

+0

您好田中,您的解决方案无法正常工作,我无法执行它。不管怎么说,还是要谢谢你 – Ben 2014-12-18 12:41:59

相关问题