HttpServer.Modules.FileModule.Process C# (CSharp) Method

Process() public method

Process a request.
Failed to find file extension Forbidden file type.
public Process ( RequestContext context ) : ProcessingResult
context RequestContext Request information
return ProcessingResult
        public ProcessingResult Process(RequestContext context)
        {
            Resource resource = _resourceManager.Get(context.Request.Uri.LocalPath);
            if (resource == null)
                return ProcessingResult.Continue;

            IRequest request = context.Request;
            IResponse response = context.Response;
            try
            {
                string fileExtension = Path.GetExtension(request.Uri.AbsolutePath).TrimStart('.');

                ContentTypeHeader header;
                if (!ContentTypes.TryGetValue(fileExtension, out header))
                    return ProcessingResult.Continue;

                response.ContentType = header;

                // Only send file if it has not been modified.
                var browserCacheDate = request.Headers["If-Modified-Since"] as DateHeader;
                if (browserCacheDate != null)
                {
                    DateTime since = browserCacheDate.Value.ToUniversalTime();
                    DateTime modified = resource.ModifiedAt;

                    // Allow for file systems with subsecond time stamps
                    modified = new DateTime(modified.Year, modified.Month, modified.Day, modified.Hour, modified.Minute, modified.Second, modified.Kind);
                    if (since >= modified)
                    {
                        response.Status = HttpStatusCode.NotModified;
                        return ProcessingResult.SendResponse;
                    }
                }

                using (resource.Stream)
                {

                    response.Add(new DateHeader("Last-Modified", resource.ModifiedAt));

                    // Send response and tell server to do nothing more with the request.
                    SendFile(context.HttpContext, response, resource.Stream);
                    return ProcessingResult.Abort;
                }
            }
            catch (FileNotFoundException err)
            {
                throw new InternalServerException("Failed to process file '" + request.Uri + "'.", err);
            }
        }