PageRenderTime 48ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/src/Server/DeviceHive.API/Filters/HttpCreatedResponseAttribute.cs

https://github.com/oryol/devicehive-.net
C# | 31 lines | 30 code | 1 blank | 0 comment | 5 complexity | bfa2fde6b7bcc29f6c51a6ad72ef68f8 MD5 | raw file
Possible License(s): MIT
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Web.Http.Filters;
  6. using System.Web.Http.Routing;
  7. using Newtonsoft.Json.Linq;
  8. namespace DeviceHive.API.Filters
  9. {
  10. public class HttpCreatedResponseAttribute : ActionFilterAttribute
  11. {
  12. public override void OnActionExecuted(HttpActionExecutedContext context)
  13. {
  14. if (context.Response != null && context.Response.IsSuccessStatusCode)
  15. {
  16. context.Response.StatusCode = HttpStatusCode.Created;
  17. context.Response.Content.ReadAsStringAsync().ContinueWith(task =>
  18. {
  19. var result = JObject.Parse(task.Result);
  20. if (result["id"] != null)
  21. {
  22. var controller = context.ActionContext.ControllerContext.ControllerDescriptor.ControllerName;
  23. var route = new UrlHelper(context.Request).Route(null, new { controller = controller, id = result["id"] });
  24. context.Response.Headers.Location = new Uri(context.Request.RequestUri, route);
  25. }
  26. }).Wait();
  27. }
  28. }
  29. }
  30. }