Copied to clipboard

Flag this post as spam?

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


  • suzyb 464 posts 877 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.

  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies