我有一些服务已经接收到必须返回给客户端的json字符串(不是对象)。当前,我正在显式创建HttpResponseMessage
并将其Content
属性设置为服务接收的json字符串:
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(jsonUtilizadores, Encoding.UTF8, "application/json");
return response;
现在,是否有更好的方法可以使用新的
IHttpActionResult
做到这一点?使用Content
或Ok
方法最终将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/