2013-11-07 17:16:22 +01:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Net;
|
|
|
|
|
|
using System.Net.Http;
|
2013-12-02 17:20:50 +11:00
|
|
|
|
using System.Net.Http.Headers;
|
2013-11-07 17:16:22 +01:00
|
|
|
|
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
|
|
|
|
|
|
{
|
2013-12-02 17:20:50 +11:00
|
|
|
|
|
2013-11-07 17:16:22 +01:00
|
|
|
|
public static class HttpRequestMessageExtensions
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Tries to retreive the current HttpContext if one exists.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static Attempt<HttpContextBase> 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<HttpContextBase>.Succeed(new HttpContextWrapper(HttpContext.Current));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return Attempt<HttpContextBase>.Fail();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 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.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="request"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
/// <remarks>
|
|
|
|
|
|
/// This is different from a 401 which indicates that the user is not logged in.
|
|
|
|
|
|
/// </remarks>
|
|
|
|
|
|
public static HttpResponseMessage CreateUserNoAccessResponse(this HttpRequestMessage request)
|
|
|
|
|
|
{
|
|
|
|
|
|
return request.CreateResponse(HttpStatusCode.Forbidden);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Create a 400 response message indicating that a validation error occurred
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="T"></typeparam>
|
|
|
|
|
|
/// <param name="request"></param>
|
|
|
|
|
|
/// <param name="value"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static HttpResponseMessage CreateValidationErrorResponse<T>(this HttpRequestMessage request, T value)
|
|
|
|
|
|
{
|
|
|
|
|
|
var msg = request.CreateResponse(HttpStatusCode.BadRequest, value);
|
|
|
|
|
|
msg.Headers.Add("X-Status-Reason", "Validation failed");
|
|
|
|
|
|
return msg;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Create a 400 response message indicating that a validation error occurred
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="request"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static HttpResponseMessage CreateValidationErrorResponse(this HttpRequestMessage request)
|
|
|
|
|
|
{
|
|
|
|
|
|
var msg = request.CreateResponse(HttpStatusCode.BadRequest);
|
|
|
|
|
|
msg.Headers.Add("X-Status-Reason", "Validation failed");
|
|
|
|
|
|
return msg;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Create a 400 response message indicating that a validation error occurred
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="request"></param>
|
|
|
|
|
|
/// <param name="errorMessage"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Create a 400 response message indicating that a validation error occurred
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="request"></param>
|
|
|
|
|
|
/// <param name="modelState"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|