public async Task InvokeAsync(HttpContext context, RequestDelegate next)
        {
            HttpRequest request = context.Request;
            int         result  = 0;

            if (_main_option.IsFilterApiPaths)
            {
                for (result = 0; result < EnterFilters.Length; result += 1)
                {
                    if (EnterFilters[result].IsMatch(request.Path.Value))
                    {
                        break;
                    }
                }
                if (result > EnterFilters.Length - 1)
                {
                    await next(context);

                    return;
                }
            }
            for (result = 0; result < IgnoreFilters.Length; result += 1)
            {
                if (IgnoreFilters[result].IsMatch(request.Path.Value))
                {
                    await next(context);

                    return;
                }
            }

            request.EnableRewind();

            string content = string.Empty;

            StringBuilder builder = new StringBuilder();

            builder.AppendLine(RequestHeader);

            if (_request_option.ShowTime)
            {
                builder.AppendLine($"{RequestKeyTabs}RtTime:{RequestValueTabs}{DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss.ffff")}");
            }
            if (_request_option.ShowLocalAddress)
            {
                builder.AppendLine($"{RequestKeyTabs}Local:{RequestValueTabs}{context.Connection.LocalIpAddress}:{context.Connection.LocalPort}");
            }
            if (_request_option.ShowRemoteAddress)
            {
                builder.AppendLine($"{RequestKeyTabs}Remote:{RequestValueTabs}{context.Connection.RemoteIpAddress}:{context.Connection.RemotePort}");
            }
            if (_request_option.ShowMethod)
            {
                builder.AppendLine($"{RequestKeyTabs}Method:{RequestValueTabs}{request.Method}");
            }
            if (_request_option.ShowUrl)
            {
                builder.AppendLine($"{RequestKeyTabs}Url:{RequestValueTabs}{request.Host}{request.Path.Value}");
            }
            if (_request_option.ShowApiPath)
            {
                if (request.Path.HasValue)
                {
                    builder.AppendLine($"{RequestKeyTabs}ApiPath:{LessRequestValueTabs}{request.Path.Value}");
                }
                else
                {
                    builder.AppendLine($"{RequestKeyTabs}ApiPath:{LessRequestValueTabs}[No API Request]");
                }
            }
            if (_request_option.ShowQueryString)
            {
                if (request.QueryString.HasValue)
                {
                    builder.AppendLine($"{RequestKeyTabs}Query:{RequestValueTabs}" + request.QueryString.Value);
                }
                else
                {
                    builder.AppendLine($"{RequestKeyTabs}Query:{RequestValueTabs}[No Query String]");
                }
            }

            if (_request_option.ShowHeader)
            {
                if (request.Headers.Count != 0)
                {
                    int startIndex = 0;
                    builder.Append($"{RequestKeyTabs}Headers:{LessRequestValueTabs}");
                    foreach (var item in request.Headers)
                    {
                        if (startIndex == 0)
                        {
                            startIndex += 1;
                            builder.AppendLine($"{item.Key}:{item.Value}");
                        }
                        else
                        {
                            builder.AppendLine($"{RequestKeyTabs}{RequestValueTabs}{item.Key}:{item.Value}");
                        }
                    }
                }
            }

            if (_request_option.ShowCookies)
            {
                if (request.Cookies.Count != 0)
                {
                    int startIndex = 0;
                    builder.Append($"{RequestKeyTabs}Cookies:{LessRequestValueTabs}");
                    foreach (var item in request.Cookies)
                    {
                        if (startIndex == 0)
                        {
                            startIndex += 1;
                            builder.AppendLine($"{item.Key}:{item.Value}");
                        }
                        else
                        {
                            builder.AppendLine($"{RequestKeyTabs}{RequestValueTabs}{item.Key}:{item.Value}");
                        }
                    }
                }
            }

            if (_request_option.ShowContent)
            {
                request.Body.Position = 0;
                content = new StreamReader(request.Body).ReadToEnd();
                request.Body.Position = 0;
                builder.AppendLine($"{RequestKeyTabs}Content:{LessRequestValueTabs}{content}");
            }

            if (!_main_option.IsMergeInfo)
            {
                builder.AppendLine(_main_option.SpliteLine);
                if (_main_option.ShowInDebug)
                {
                    Debug.WriteLine(builder.ToString());
                }
                if (_main_option.ShowInConsole)
                {
                    Console.WriteLine(builder.ToString());
                }
                builder.Clear();
                builder.AppendLine("\r\n==================================================================================================================\r\n");
            }

            builder.AppendLine();
            builder.AppendLine(ResponseHeader);

            HttpResponse response = context.Response;

            if (_response_option.ShowContent)
            {
                Stream originalBody = context.Response.Body;
                try
                {
                    using (var memStream = new MemoryStream())
                    {
                        context.Response.Body = memStream;

                        await next(context);

                        if (_response_contents.ContainsKey(response))
                        {
                            content = _response_contents[response];
                        }
                        else
                        {
                            memStream.Position = 0;
                            content            = new StreamReader(memStream).ReadToEnd();
                        }
                        memStream.Position = 0;
                        await memStream.CopyToAsync(originalBody);
                    }
                }
                catch (Exception ex) {
                    content = ex.Message;
                }
                context.Response.Body = originalBody;
            }
            else
            {
                await next(context);
            }
            if (!_main_option.Pass(response.StatusCode))
            {
                return;
            }
            if (_response_option.ShowTime)
            {
                builder.AppendLine($"{ResponseKeyTabs}RtTime:{RequestValueTabs}{DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss.ffff")}");
            }
            if (_response_option.ShowUrl)
            {
                builder.AppendLine($"{ResponseKeyTabs}Url:{RequestValueTabs}{request.Host}{request.Path.Value}");
            }
            if (_response_option.ShowStatueCode)
            {
                builder.AppendLine($"{ResponseKeyTabs}Status:{RequestValueTabs}{response.StatusCode}");
            }
            if (_response_option.ShowHeader)
            {
                if (response.Headers.Count != 0)
                {
                    int startIndex = 0;
                    builder.Append($"{ResponseKeyTabs}Headers:{LessRequestValueTabs}");
                    foreach (var item in response.Headers)
                    {
                        if (startIndex == 0)
                        {
                            startIndex += 1;
                            builder.AppendLine($"{item.Key}:{item.Value}");
                        }
                        else
                        {
                            builder.AppendLine($"{ResponseKeyTabs}{RequestValueTabs}{item.Key}:{item.Value}");
                        }
                    }
                }
            }
            if (_response_option.ShowContent)
            {
                builder.AppendLine($"{ResponseKeyTabs}Content:{LessRequestValueTabs}{content}");
            }
            builder.AppendLine(_main_option.SpliteLine);
            if (_main_option.ShowInDebug)
            {
                Debug.WriteLine(builder.ToString());
            }
            if (_main_option.ShowInConsole)
            {
                Console.WriteLine(builder.ToString());
            }
        }