namespace Example {
public class ExampleApiController : ApiController {
[HttpGet]
[Route ("api/content-stream/example")]
public HttpResponseMessage GetContentStream () {
try {
var response = new HttpResponseMessage (HttpStatusCode.OK);
response.Content = new PushStreamContent (
async (outputStream, httpContext, transportContext) => {
try {
Stream memoryStream = new MemoryStream ("data from a custom stream");
memoryStream.Position = 0;
await memoryStream.CopyToAsync (outputStream);
memoryStream.Flush ();
memoryStream.Close ();
} finally {
// Close output stream as we are done
outputStream.Flush ();
outputStream.Close ();
}
},
"application/octet-stream"
);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue ("attachment") {
FileName = "data.txt"
};
return response;
} catch (Exception ex) {
Log.Error (ex);
return ResponseHelper.FromException (Request, ex);
}
}
}
public class TaskValidationResult {
public TaskValidationResult () {
}
public TaskValidationResult (string message, string property = null, object target = null) {
Message = message;
Property = property;
Target = target;
}
public string Message;
public string Property;
public object Target;
}
public class TaskResult<T> {
public bool Success {
get {
return !ValidationResults.Any ();
}
}
public T Result;
public int TotalResultCount = 0;
public IList<TaskValidationResult> ValidationResults = new List<TaskValidationResult> ();
}
public class ResponseHelper {
public static HttpResponseMessage FromSuccess<T> (HttpRequestMessage request, T result, HttpStatusCode successCode = HttpStatusCode.OK) {
return request.CreateResponse (successCode, result, "application/json");
}
public static HttpResponseMessage FromFail (HttpRequestMessage request, string message, HttpStatusCode failCode = HttpStatusCode.BadRequest) {
var validationResults = new List<TaskValidationResult> {
new TaskValidationResult (message)
};
return request.CreateResponse (failCode, validationResults, "application/json");
}
public static HttpResponseMessage FromFail (HttpRequestMessage request, IEnumerable<TaskValidationResult> validationResults, HttpStatusCode failCode = HttpStatusCode.BadRequest) {
return request.CreateResponse (failCode, validationResults, "application/json");
}
public static HttpResponseMessage FromTaskResult<T> (HttpRequestMessage request, TaskResult<T> result, HttpStatusCode successCode = HttpStatusCode.OK, HttpStatusCode failCode = HttpStatusCode.BadRequest) {
if (result.Success) {
var response = request.CreateResponse (successCode, result.Result, "application/json");
response.Headers.Add ("X-TotalCount", result.TotalResultCount.ToString ());
return response;
} else {
return request.CreateResponse (failCode, result.ValidationResults);
}
}
public static HttpResponseMessage FromException (HttpRequestMessage request, Exception ex, HttpStatusCode statusCode = HttpStatusCode.InternalServerError) {
#if DEBUG
return request.CreateResponse (statusCode, ex, "application/json");
#else
return request.CreateResponse (statusCode, "");
#endif
}
}
}
81500cookie-checkC# WebAPI Stream content