2014-12-05 182 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

相關問題