using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using System.Web; using System.Web.Http; using System.Web.Http.ModelBinding; using Umbraco.Core; namespace Umbraco.Web.WebApi { public static class HttpRequestMessageExtensions { /// /// Tries to retrieve the current HttpContext if one exists. /// /// public static Attempt TryGetHttpContext(this HttpRequestMessage request) { object context; if (request.Properties.TryGetValue("MS_HttpContext", out context)) { var httpContext = context as HttpContextBase; if (httpContext != null) { return Attempt.Succeed(httpContext); } } if (HttpContext.Current != null) { return Attempt.Succeed(new HttpContextWrapper(HttpContext.Current)); } return Attempt.Fail(); } /// /// Create a 403 (Forbidden) response indicating that hte current user doesn't have access to the resource /// requested or the action it needs to take. /// /// /// /// /// This is different from a 401 which indicates that the user is not logged in. /// public static HttpResponseMessage CreateUserNoAccessResponse(this HttpRequestMessage request) { return request.CreateResponse(HttpStatusCode.Forbidden); } /// /// Create a 400 response message indicating that a validation error occurred /// /// /// /// /// public static HttpResponseMessage CreateValidationErrorResponse(this HttpRequestMessage request, T value) { var msg = request.CreateResponse(HttpStatusCode.BadRequest, value); msg.Headers.Add("X-Status-Reason", "Validation failed"); return msg; } /// /// Create a 400 response message indicating that a validation error occurred /// /// /// public static HttpResponseMessage CreateValidationErrorResponse(this HttpRequestMessage request) { var msg = request.CreateResponse(HttpStatusCode.BadRequest); msg.Headers.Add("X-Status-Reason", "Validation failed"); return msg; } /// /// Create a 400 response message indicating that a validation error occurred /// /// /// /// public static HttpResponseMessage CreateValidationErrorResponse(this HttpRequestMessage request, string errorMessage) { var msg = request.CreateErrorResponse(HttpStatusCode.BadRequest, errorMessage); msg.Headers.Add("X-Status-Reason", "Validation failed"); return msg; } /// /// Create a 400 response message indicating that a validation error occurred /// /// /// /// public static HttpResponseMessage CreateValidationErrorResponse(this HttpRequestMessage request, ModelStateDictionary modelState) { var msg = request.CreateErrorResponse(HttpStatusCode.BadRequest, modelState); msg.Headers.Add("X-Status-Reason", "Validation failed"); return msg; } } }