Files
Umbraco-CMS/src/Umbraco.Web/WebApi/HttpRequestMessageExtensions.cs

125 lines
4.7 KiB
C#
Raw Normal View History

2013-11-07 17:16:22 +01:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
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;
2015-02-20 14:17:28 +01:00
using Microsoft.Owin;
2013-11-07 17:16:22 +01:00
using Umbraco.Core;
namespace Umbraco.Web.WebApi
{
2013-11-07 17:16:22 +01:00
public static class HttpRequestMessageExtensions
{
2015-02-20 14:17:28 +01:00
/// <summary>
/// Borrowed from the latest Microsoft.AspNet.WebApi.Owin package which we cannot use because of a later webapi dependency
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
internal static Attempt<IOwinContext> TryGetOwinContext(this HttpRequestMessage request)
{
var httpContext = request.TryGetHttpContext();
return httpContext
? Attempt.Succeed(httpContext.Result.GetOwinContext())
: Attempt<IOwinContext>.Fail();
}
2013-11-07 17:16:22 +01:00
/// <summary>
2014-03-25 20:25:24 -07:00
/// Tries to retrieve the current HttpContext if one exists.
2013-11-07 17:16:22 +01:00
/// </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;
}
}
}