【问题标题】:ServiceStack Customize HTTP Responses ADD message and errorCodeServiceStack 自定义 HTTP 响应添加消息和错误代码
【发布时间】:2014-12-05 16:28:02
【问题描述】:

我正在尝试为我的 Web 服务添加带有 HTTP 错误响应的自定义消息。我希望是这样的:

远程服务器返回错误:(406) Not Acceptable。 自定义消息:{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) Not Acceptable。”但不是自定义消息。 我误解了什么吗? 谢谢

【问题讨论】:

    标签: c# http http-post servicestack httpresponse


    【解决方案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 Development Server 不支持设置自定义状态描述。

    【讨论】:

    • 嗨@mythz,我正在尝试锻炼如何使用您的服务,很抱歉,但我不明白发送错误信息以接收...错误信息的意义。如果我错过了重点,请告诉我。我在想的是错误处理程序,它将分析发布的数据并为每种错误发回不同的描述。我把我的代码放在了 GitHub 上,你可以看到我尝试为每个错误案例发回相同的 HTTP 代码和不同的描述。有链接:github.com/SuperBulot/Custom_response/commit/…谢谢你的帮助
    • @Ben 上面的服务表明,在服务中抛出HttpError 在自托管和大多数 ASP.NET Web 服务器中确实可以正常工作,但在 VS WebDev 服务器中无法正常工作'不允许设置自定义 StatusDescription。
    • 我知道,我正在使用 IIS 8.1 下的 ASP.NET Web 服务器。我想我只会在经典的 DTO 响应中添加我的错误代码和错误描述。还是谢谢
    【解决方案2】:

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

    你可以试试这样的

    抛出新的 HttpError。 (点后会显示几个错误)

    例如

    HttpError.NotFound("在此处放置自定义消息")

    HttpError.Conflict("在此处放置自定义消息")

    【讨论】:

    • 您好 Tanaka,您的解决方案不起作用,我无法实施。还是谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2016-08-06
    • 2022-11-03
    相关资源
    最近更新 更多