Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • suzyb 474 posts 932 karma points
    Jul 08, 2011 @ 17:44
    suzyb
    0

    Value does not fall within the expected range error in httpmodule

    I have an httpmodule to catch errors when people try to upload too large a file.  But I am getting a "Value does not fall within the expected range" error when trying to redirect to an error page.  This is my BeginRequest code.

    HttpRuntimeSection runTime = (HttpRuntimeSection)WebConfigurationManager.GetSection("system.web/httpRuntime");

    //Approx 100 Kb(for page content) size has been deducted because the maxRequestLength proprty is the page size, not only the file upload size
    int maxRequestLength = (runTime.MaxRequestLength - 100) * 1024;

    //This code is used to check the request length of the page and if the request length is greater than
    //MaxRequestLength then retrun to the same page with extra query string value action=exception
    HttpContext context = ((HttpApplication)sender).Context;

    if (context.Request.ContentLength > maxRequestLength)
    {
        IServiceProvider provider = (IServiceProvider)context;
        HttpWorkerRequest workerRequest = (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));

        // Check if body contains data
        if (workerRequest.HasEntityBody())
        {
            // get the total body length
            int requestLength = workerRequest.GetTotalEntityBodyLength();

            // Get the initial bytes loaded
            int initialBytes = 0;

            if (workerRequest.GetPreloadedEntityBody() != null)
                initialBytes = workerRequest.GetPreloadedEntityBody().Length;

            if (!workerRequest.IsEntireEntityBodyIsPreloaded())
            {
                byte[] buffer = new byte[512000];

                // Set the received bytes to initial bytes before start reading
                int receivedBytes = initialBytes;

                while (requestLength - receivedBytes >= initialBytes)
                {
                    // Read another set of bytes
                    initialBytes = workerRequest.ReadEntityBody(buffer, buffer.Length);

                    // Update the received bytes
                    receivedBytes += initialBytes;
                }

                initialBytes = workerRequest.ReadEntityBody(buffer, requestLength - receivedBytes);

            }

        }

        context.Response.Redirect("/error-pages/upload-error.aspx");
    }

    Does anyone know what could be wrong.  The only think I can find on google is IIS rejecting new lines in headers.  But I still get the error when I clear the headers.

Please Sign in or register to post replies

Write your reply to:

Draft