Skip to content

Instantly share code, notes, and snippets.

@msarchet
Last active January 2, 2016 17:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save msarchet/8339999 to your computer and use it in GitHub Desktop.
Save msarchet/8339999 to your computer and use it in GitHub Desktop.
Generic Inheritance
namespace Services.Core.HttpActionResult
{
using System.Web.Http;
using System.Net.Http;
using System.Threading.Tasks;
public abstract class BaseActionResult : IHttpActionResult
{
protected readonly HttpRequestMessage request;
protected readonly Task task;
protected BaseActionResult(HttpRequestMessage request, Task task)
{
this.request = request;
this.task = task;
}
public abstract Task<HttpResponseMessage> ExecuteAsync(System.Threading.CancellationToken cancellationToken);
}
}
namespace Services.Core.HttpActionResult
{
using System.Net.Http;
using System.Threading.Tasks;
public abstract class BaseActionResult<T> : BaseActionResult
{
protected readonly Task<T> task;
protected BaseActionResult(HttpRequestMessage request, Task<T> task)
: base(request, task)
{
this.task = task;
}
}
}
namespace Services.Core.HttpActionResult
{
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
/// <summary>
/// The patch result.
/// </summary>
public class PatchResult : BaseActionResult
{
/// <summary>
/// Initializes a new instance of the <see cref="PatchResult"/> class.
/// </summary>
/// <param name="request">
/// The request.
/// </param>
/// <param name="task">
/// The task.
/// </param>
public PatchResult(HttpRequestMessage request, Task task)
: base(request, task)
{
}
/// <summary>
/// The execute async.
/// </summary>
/// <param name="cancellationToken">
/// The cancellation token.
/// </param>
/// <returns>
/// The <see cref="Task"/>.
/// </returns>
public override async Task<HttpResponseMessage> ExecuteAsync(System.Threading.CancellationToken cancellationToken)
{
await this.task;
return request.CreateResponse(HttpStatusCode.NoContent);
}
}
}
namespace Services.Core.HttpActionResult
{
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
/// <summary>
/// The patch result.
/// </summary>
/// <typeparam name="T">
/// Result of the Patch
/// </typeparam>
public class PatchResult<T> : BaseActionResult<T>
{
/// <summary>
/// Initializes a new instance of the <see cref="PatchResult{T}"/> class.
/// </summary>
/// <param name="request">
/// The request.
/// </param>
/// <param name="task">
/// The task.
/// </param>
public PatchResult(HttpRequestMessage request, Task<T> task)
: base(request, task)
{
}
/// <summary>
/// The execute async.
/// </summary>
/// <param name="cancellationToken">
/// The cancellation token.
/// </param>
/// <returns>
/// The <see cref="Task"/>.
/// </returns>
public override async Task<HttpResponseMessage> ExecuteAsync(System.Threading.CancellationToken cancellationToken)
{
var result = await task;
return !result.Equals(default(T))
? request.CreateResponse(HttpStatusCode.OK, result)
: request.CreateErrorResponse(HttpStatusCode.NotFound, "Not Found");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment