Capture the size of the response (in bytes) of a WebAPI method call












2















Is there a way to do this in WebAPI without reinventing the wheel? I can easily get the size of the object returned via WebAPI, but of course there are headers and serialization overhead. Since we are charged by bandwidth utilization, I'd like to know how big our responses are, but there does not seem to be an obvious mechanism for doing so.



EDIT
To be clear, I am looking for a way to do this programatically, so that I can report, analyze, and predict usage, and so I don't get caught by surprise with a bill.










share|improve this question





























    2















    Is there a way to do this in WebAPI without reinventing the wheel? I can easily get the size of the object returned via WebAPI, but of course there are headers and serialization overhead. Since we are charged by bandwidth utilization, I'd like to know how big our responses are, but there does not seem to be an obvious mechanism for doing so.



    EDIT
    To be clear, I am looking for a way to do this programatically, so that I can report, analyze, and predict usage, and so I don't get caught by surprise with a bill.










    share|improve this question



























      2












      2








      2


      2






      Is there a way to do this in WebAPI without reinventing the wheel? I can easily get the size of the object returned via WebAPI, but of course there are headers and serialization overhead. Since we are charged by bandwidth utilization, I'd like to know how big our responses are, but there does not seem to be an obvious mechanism for doing so.



      EDIT
      To be clear, I am looking for a way to do this programatically, so that I can report, analyze, and predict usage, and so I don't get caught by surprise with a bill.










      share|improve this question
















      Is there a way to do this in WebAPI without reinventing the wheel? I can easily get the size of the object returned via WebAPI, but of course there are headers and serialization overhead. Since we are charged by bandwidth utilization, I'd like to know how big our responses are, but there does not seem to be an obvious mechanism for doing so.



      EDIT
      To be clear, I am looking for a way to do this programatically, so that I can report, analyze, and predict usage, and so I don't get caught by surprise with a bill.







      c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Feb 21 '14 at 13:51







      Jeremy Holovacs

















      asked Feb 21 '14 at 12:48









      Jeremy HolovacsJeremy Holovacs

      12.1k2176186




      12.1k2176186
























          2 Answers
          2






          active

          oldest

          votes


















          9














          Here is a message handler that can get the sizes you are looking for,



          public class ResponseSizeHandler : DelegatingHandler
          {
          protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
          {

          var response = await base.SendAsync(request, cancellationToken);
          if (response.Content != null)
          {
          await response.Content.LoadIntoBufferAsync();
          var bodylength = response.Content.Headers.ContentLength;
          var headerlength = response.Headers.ToString().Length;
          }
          return response;
          }
          }


          Just add an instance of this handler as the first message handler.



          config.MessageHandlers.Add(new ResponseSizeHandler());


          Don't be concerned by the LoadIntoBufferAsync, unless you actually do streaming content then almost all content is buffered by the host anyway, so doing it a little earlier in the pipeline will not add any extra overhead.






          share|improve this answer


























          • Where Can i found config.MessageHandlers.Add in Web Api Core 2?

            – Drakoo
            Nov 21 '18 at 10:17



















          2














          You can use Chrome F12 Developer Tools and its Network Tab or Fiddler tool to get the Content-Length of a particular HTTP Response.



          In Chrome (for example) -



          enter image description here



          In Fiddler (for example) -



          enter image description here



          UPDATE



          In Web API you can have a DelegatingHandler to record the response, and in DelegatingHandler you can have like this to get the ContentLength, in face you can get all the headers and response also -



          return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
          {
          HttpResponseMessage response = task.Result;
          var contentLength = response.Content.Headers.ContentLength;
          return response;
          });





          share|improve this answer


























          • Sorry, I wasn't clear. I want to capture this programmatically, from within the ASP.NET framework.

            – Jeremy Holovacs
            Feb 21 '14 at 13:45











          • @JeremyHolovacs, I updated my answer.

            – ramiramilu
            Feb 21 '14 at 14:17











          • In Web api core2 i dont have HttpRequestMessage, I have only HttpContext and HttpRequest.

            – Drakoo
            Nov 21 '18 at 11:33











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f21934933%2fcapture-the-size-of-the-response-in-bytes-of-a-webapi-method-call%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          9














          Here is a message handler that can get the sizes you are looking for,



          public class ResponseSizeHandler : DelegatingHandler
          {
          protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
          {

          var response = await base.SendAsync(request, cancellationToken);
          if (response.Content != null)
          {
          await response.Content.LoadIntoBufferAsync();
          var bodylength = response.Content.Headers.ContentLength;
          var headerlength = response.Headers.ToString().Length;
          }
          return response;
          }
          }


          Just add an instance of this handler as the first message handler.



          config.MessageHandlers.Add(new ResponseSizeHandler());


          Don't be concerned by the LoadIntoBufferAsync, unless you actually do streaming content then almost all content is buffered by the host anyway, so doing it a little earlier in the pipeline will not add any extra overhead.






          share|improve this answer


























          • Where Can i found config.MessageHandlers.Add in Web Api Core 2?

            – Drakoo
            Nov 21 '18 at 10:17
















          9














          Here is a message handler that can get the sizes you are looking for,



          public class ResponseSizeHandler : DelegatingHandler
          {
          protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
          {

          var response = await base.SendAsync(request, cancellationToken);
          if (response.Content != null)
          {
          await response.Content.LoadIntoBufferAsync();
          var bodylength = response.Content.Headers.ContentLength;
          var headerlength = response.Headers.ToString().Length;
          }
          return response;
          }
          }


          Just add an instance of this handler as the first message handler.



          config.MessageHandlers.Add(new ResponseSizeHandler());


          Don't be concerned by the LoadIntoBufferAsync, unless you actually do streaming content then almost all content is buffered by the host anyway, so doing it a little earlier in the pipeline will not add any extra overhead.






          share|improve this answer


























          • Where Can i found config.MessageHandlers.Add in Web Api Core 2?

            – Drakoo
            Nov 21 '18 at 10:17














          9












          9








          9







          Here is a message handler that can get the sizes you are looking for,



          public class ResponseSizeHandler : DelegatingHandler
          {
          protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
          {

          var response = await base.SendAsync(request, cancellationToken);
          if (response.Content != null)
          {
          await response.Content.LoadIntoBufferAsync();
          var bodylength = response.Content.Headers.ContentLength;
          var headerlength = response.Headers.ToString().Length;
          }
          return response;
          }
          }


          Just add an instance of this handler as the first message handler.



          config.MessageHandlers.Add(new ResponseSizeHandler());


          Don't be concerned by the LoadIntoBufferAsync, unless you actually do streaming content then almost all content is buffered by the host anyway, so doing it a little earlier in the pipeline will not add any extra overhead.






          share|improve this answer















          Here is a message handler that can get the sizes you are looking for,



          public class ResponseSizeHandler : DelegatingHandler
          {
          protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
          {

          var response = await base.SendAsync(request, cancellationToken);
          if (response.Content != null)
          {
          await response.Content.LoadIntoBufferAsync();
          var bodylength = response.Content.Headers.ContentLength;
          var headerlength = response.Headers.ToString().Length;
          }
          return response;
          }
          }


          Just add an instance of this handler as the first message handler.



          config.MessageHandlers.Add(new ResponseSizeHandler());


          Don't be concerned by the LoadIntoBufferAsync, unless you actually do streaming content then almost all content is buffered by the host anyway, so doing it a little earlier in the pipeline will not add any extra overhead.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Oct 28 '15 at 17:41









          Yuval Itzchakov

          116k26173242




          116k26173242










          answered Feb 21 '14 at 14:16









          Darrel MillerDarrel Miller

          113k27170225




          113k27170225













          • Where Can i found config.MessageHandlers.Add in Web Api Core 2?

            – Drakoo
            Nov 21 '18 at 10:17



















          • Where Can i found config.MessageHandlers.Add in Web Api Core 2?

            – Drakoo
            Nov 21 '18 at 10:17

















          Where Can i found config.MessageHandlers.Add in Web Api Core 2?

          – Drakoo
          Nov 21 '18 at 10:17





          Where Can i found config.MessageHandlers.Add in Web Api Core 2?

          – Drakoo
          Nov 21 '18 at 10:17













          2














          You can use Chrome F12 Developer Tools and its Network Tab or Fiddler tool to get the Content-Length of a particular HTTP Response.



          In Chrome (for example) -



          enter image description here



          In Fiddler (for example) -



          enter image description here



          UPDATE



          In Web API you can have a DelegatingHandler to record the response, and in DelegatingHandler you can have like this to get the ContentLength, in face you can get all the headers and response also -



          return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
          {
          HttpResponseMessage response = task.Result;
          var contentLength = response.Content.Headers.ContentLength;
          return response;
          });





          share|improve this answer


























          • Sorry, I wasn't clear. I want to capture this programmatically, from within the ASP.NET framework.

            – Jeremy Holovacs
            Feb 21 '14 at 13:45











          • @JeremyHolovacs, I updated my answer.

            – ramiramilu
            Feb 21 '14 at 14:17











          • In Web api core2 i dont have HttpRequestMessage, I have only HttpContext and HttpRequest.

            – Drakoo
            Nov 21 '18 at 11:33
















          2














          You can use Chrome F12 Developer Tools and its Network Tab or Fiddler tool to get the Content-Length of a particular HTTP Response.



          In Chrome (for example) -



          enter image description here



          In Fiddler (for example) -



          enter image description here



          UPDATE



          In Web API you can have a DelegatingHandler to record the response, and in DelegatingHandler you can have like this to get the ContentLength, in face you can get all the headers and response also -



          return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
          {
          HttpResponseMessage response = task.Result;
          var contentLength = response.Content.Headers.ContentLength;
          return response;
          });





          share|improve this answer


























          • Sorry, I wasn't clear. I want to capture this programmatically, from within the ASP.NET framework.

            – Jeremy Holovacs
            Feb 21 '14 at 13:45











          • @JeremyHolovacs, I updated my answer.

            – ramiramilu
            Feb 21 '14 at 14:17











          • In Web api core2 i dont have HttpRequestMessage, I have only HttpContext and HttpRequest.

            – Drakoo
            Nov 21 '18 at 11:33














          2












          2








          2







          You can use Chrome F12 Developer Tools and its Network Tab or Fiddler tool to get the Content-Length of a particular HTTP Response.



          In Chrome (for example) -



          enter image description here



          In Fiddler (for example) -



          enter image description here



          UPDATE



          In Web API you can have a DelegatingHandler to record the response, and in DelegatingHandler you can have like this to get the ContentLength, in face you can get all the headers and response also -



          return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
          {
          HttpResponseMessage response = task.Result;
          var contentLength = response.Content.Headers.ContentLength;
          return response;
          });





          share|improve this answer















          You can use Chrome F12 Developer Tools and its Network Tab or Fiddler tool to get the Content-Length of a particular HTTP Response.



          In Chrome (for example) -



          enter image description here



          In Fiddler (for example) -



          enter image description here



          UPDATE



          In Web API you can have a DelegatingHandler to record the response, and in DelegatingHandler you can have like this to get the ContentLength, in face you can get all the headers and response also -



          return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
          {
          HttpResponseMessage response = task.Result;
          var contentLength = response.Content.Headers.ContentLength;
          return response;
          });






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Feb 21 '14 at 14:17

























          answered Feb 21 '14 at 13:11









          ramiramiluramiramilu

          14.8k44060




          14.8k44060













          • Sorry, I wasn't clear. I want to capture this programmatically, from within the ASP.NET framework.

            – Jeremy Holovacs
            Feb 21 '14 at 13:45











          • @JeremyHolovacs, I updated my answer.

            – ramiramilu
            Feb 21 '14 at 14:17











          • In Web api core2 i dont have HttpRequestMessage, I have only HttpContext and HttpRequest.

            – Drakoo
            Nov 21 '18 at 11:33



















          • Sorry, I wasn't clear. I want to capture this programmatically, from within the ASP.NET framework.

            – Jeremy Holovacs
            Feb 21 '14 at 13:45











          • @JeremyHolovacs, I updated my answer.

            – ramiramilu
            Feb 21 '14 at 14:17











          • In Web api core2 i dont have HttpRequestMessage, I have only HttpContext and HttpRequest.

            – Drakoo
            Nov 21 '18 at 11:33

















          Sorry, I wasn't clear. I want to capture this programmatically, from within the ASP.NET framework.

          – Jeremy Holovacs
          Feb 21 '14 at 13:45





          Sorry, I wasn't clear. I want to capture this programmatically, from within the ASP.NET framework.

          – Jeremy Holovacs
          Feb 21 '14 at 13:45













          @JeremyHolovacs, I updated my answer.

          – ramiramilu
          Feb 21 '14 at 14:17





          @JeremyHolovacs, I updated my answer.

          – ramiramilu
          Feb 21 '14 at 14:17













          In Web api core2 i dont have HttpRequestMessage, I have only HttpContext and HttpRequest.

          – Drakoo
          Nov 21 '18 at 11:33





          In Web api core2 i dont have HttpRequestMessage, I have only HttpContext and HttpRequest.

          – Drakoo
          Nov 21 '18 at 11:33


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f21934933%2fcapture-the-size-of-the-response-in-bytes-of-a-webapi-method-call%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          How to send String Array data to Server using php in android

          Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents

          Is anime1.com a legal site for watching anime?