我有一些服务已经接收到必须返回给客户端的json字符串(不是对象)。当前,我正在显式创建HttpResponseMessage并将其Content属性设置为服务接收的json字符串:

var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(jsonUtilizadores, Encoding.UTF8, "application/json");
return response;

现在,是否有更好的方法可以使用新的IHttpActionResult做到这一点?使用ContentOk方法最终将json字符串用引号引起来,这不是我想要的。

任何反馈?

最佳答案

创建自定义实现。该框架可通过IHttpActionResult进行扩展。

下面创建一个自定义结果和扩展方法...

public static class JsonStringResultExtension {
   public static CustomJsonStringResult JsonString(this ApiController controller, string jsonContent, HttpStatusCode statusCode = HttpStatusCode.OK) {
        var result = new CustomJsonStringResult(controller.Request, statusCode, jsonContent);
        return result;
    }

    public class CustomJsonStringResult : IHttpActionResult {
        private string json;
        private HttpStatusCode statusCode;
        private HttpRequestMessage request;

        public CustomJsonStringResult(HttpRequestMessage httpRequestMessage, HttpStatusCode statusCode = HttpStatusCode.OK, string json = "") {
            this.request = httpRequestMessage;
            this.json = json;
            this.statusCode = statusCode;
        }

        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) {
            return Task.FromResult(Execute());
        }

        private HttpResponseMessage Execute() {
            var response = request.CreateResponse(statusCode);
            response.Content = new StringContent(json, Encoding.UTF8, "application/json");
            return response;
        }
    }
}

...然后可以将其应用于ApiController派生的类。大大简化了之前对
return this.JsonString(jsonUtilizadores); //defaults to 200 OK

或具有所需的HTTP状态代码
return this.JsonString(jsonUtilizadores, HttpStatusCode.BadRequest);

关于c# - 网页API : recommended way to return json string,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40833162/

10-11 22:46
查看更多