WebApi .Net – Add DelegatingHandler to Get Request Body

Out of the box, WebApi pipeline bind request body to parameter, therefore WebApi Controller (which inherit from ApiController) `Request.Content` object is empty.

For example, passing this json in the request body:

        "Name": "Test",
        "Status": "C",

Will bind it to WebApi Controller’s parameter, however, `Request.Content` object is empty.

screenshot message handler

Overcome this issue by creating `DelegatingHandler` to add request body back.


using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;

namespace QC
    public class RequestHandler : DelegatingHandler
        protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
            // Request body stream is emptied when WebApi bind request body to parameter, here we add original request body back so we can access it
            if (request.Content != null)
                string body = await request.Content.ReadAsStringAsync();
                request.Properties["body"] = body;

            return await base.SendAsync(request, cancellationToken);

Register in WebApiConfig.


public static class WebApiConfig
    public static void Register(HttpConfiguration config)
        config.MessageHandlers.Add(new RequestHandler());

Viola! `Request.Content` contains request body.

screenshot message handler2

Code is from here.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s