/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
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- using System.Web.Http.Filters;
- using System.Web.Http.Routing;
- using Newtonsoft.Json.Linq;
- namespace DeviceHive.API.Filters
- {
- public class HttpCreatedResponseAttribute : ActionFilterAttribute
- {
- public override void OnActionExecuted(HttpActionExecutedContext context)
- {
- if (context.Response != null && context.Response.IsSuccessStatusCode)
- {
- context.Response.StatusCode = HttpStatusCode.Created;
- context.Response.Content.ReadAsStringAsync().ContinueWith(task =>
- {
- var result = JObject.Parse(task.Result);
- if (result["id"] != null)
- {
- var controller = context.ActionContext.ControllerContext.ControllerDescriptor.ControllerName;
- var route = new UrlHelper(context.Request).Route(null, new { controller = controller, id = result["id"] });
- context.Response.Headers.Location = new Uri(context.Request.RequestUri, route);
- }
- }).Wait();
- }
- }
- }
- }