Create custom implementation. The framework is extensible via the IHttpActionResult
.
The following creates a custom result and extension method...
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;
}
}
}
...that can then be applied to ApiController
derived classes. Greatly simplifying previous calls to
return this.JsonString(jsonUtilizadores); //defaults to 200 OK
or with desired HTTP status code
return this.JsonString(jsonUtilizadores, HttpStatusCode.BadRequest);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…