Return content with IHttpActionResult for non-OK response
I ended up going with the following solution:
public class HttpActionResult : IHttpActionResult
{
private readonly string _message;
private readonly HttpStatusCode _statusCode;
public HttpActionResult(HttpStatusCode statusCode, string message)
{
_statusCode = statusCode;
_message = message;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response = new HttpResponseMessage(_statusCode)
{
Content = new StringContent(_message)
};
return Task.FromResult(response);
}
}
... which can be used like this:
public IHttpActionResult Get()
{
return new HttpActionResult(HttpStatusCode.InternalServerError, "error message"); // can use any HTTP status code
}
I'm open to suggestions for improvement. :)
How do I return NotFound() IHttpActionResult with an error message or exception?
Here's a one-liner for returning a IHttpActionResult NotFound with a simple message:
return Content(HttpStatusCode.NotFound, "Foo does not exist.");
How to add code in Response Body of IHttpActionResult return BadRequest(Message)
You can do something like this, with out testing it:
return Content((HttpStatusCode)400, "Failed Invalid Product Id");
If you really want to have customized way to do it than you need to extend IHttpActionResult
implementation with your own class like the following example which is inspired from this link:
public class ErrorResult : IHttpActionResult
{
private readonly Error _error;
private readonly HttpRequestMessage _request;
public ErrorResult(Error error, HttpRequestMessage request)
{
_error = error;
_request = request;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var err = new Error()
{
Code = _error.Code,
Message = _error.Message
};
var response = new HttpResponseMessage(HttpStatusCode.BadRequest)
{
Content = new ObjectContent<Error>(err, new JsonMediaTypeFormatter()),
RequestMessage = _request
};
return Task.FromResult(response);
}
}
public class Error
{
public string Code { get; set; }
public string Message { get; set; }
}
Then to use it:
var err = new Error()
{
Code = "400",
Message = "Failed Invalid Product Id"
};
return new ErrorResult(err, Request);
This will error return:
Related Topics
Ilookup<Tkey, Tval> VS. Igrouping<Tkey, Tval>
How to Load All Assemblies from Within Your /Bin Directory
Ef Data Context - Async/Await & Multithreading
How to Split an Ienumerable into Two by a Boolean Criteria Without Two Queries
How to Display a Windows Form in Full Screen on Top of the Taskbar
Programmatically Get Summary Comments at Runtime
Sqlite Keeps the Database Locked Even After the Connection Is Closed
Is There a "Between" Function in C#
Display Custom Error Page When File Upload Exceeds Allowed Size in ASP.NET MVC
When to Use Properties Instead of Functions
ASP.NET Core Jwt Mapping Role Claims to Claimsidentity
How to Add a Certificate to Webclient (C#)
Uploading and Downloading Large Files in ASP.NET Core 3.1
How to Extend C# Built-In Types, Like String
Differencebetween Streamwriter.Flush() and Streamwriter.Close()