Example #1
0
        /// <summary>
        /// 获得文件返回
        /// </summary>
        /// <param name="url"></param>
        /// <param name="IfModifiedSince"></param>
        /// <returns></returns>
        protected virtual async Task <IFullHttpResponse> GetFileResponseAsync(string url, ICharSequence IfModifiedSince)
        {
            if (url.StartsWith("/") || url.StartsWith(@"\"))
            {
                url = url.Substring(1);
            }
            string filePath  = Path.Combine(AppDomain.CurrentDomain.BaseDirectory ?? throw new DotNettyException("路径为空"), HtmlPageFolderPath, url);
            string extension = Path.GetExtension(filePath);

            if (string.IsNullOrEmpty(extension))
            {
                return(HttpResponseHelper.GetHttpResponse(HttpResponseStatus.NotFound));
            }
            if (!File.Exists(filePath))
            {
                return(HttpResponseHelper.GetHttpResponse(HttpResponseStatus.NotFound));
            }
            (FileCacheModel fileCacheModel, bool isCache) = await GetFileBytesAsync(filePath, IfModifiedSince);

            string contentType = MIMEManager.GetContentType(extension);
            Dictionary <AsciiString, object> headers = HttpResponseHelper.GetDefaultHeaders(contentType);

            headers.Add(HttpHeaderNames.LastModified, fileCacheModel.CacheTime);
            if (isCache)
            {
                return(HttpResponseHelper.GetHttpResponse(HttpResponseStatus.NotModified, headers));
            }
            headers.Add(HttpHeaderNames.Expires, DateTime.Now.AddSeconds(CacheSecond));
            headers.Add(HttpHeaderNames.CacheControl, $"max-age={CacheSecond}");
            return(HttpResponseHelper.GetHttpResponse(HttpResponseStatus.OK, fileCacheModel.Body, headers));
        }
Example #2
0
        /// <summary>
        /// 获取文本返回
        /// </summary>
        /// <param name="actionResult"></param>
        /// <returns></returns>
        protected virtual IFullHttpResponse GetTextResponse(object actionResult)
        {
            Dictionary <AsciiString, object> headers = HttpResponseHelper.GetDefaultHeaders("text/plain;charset=utf-8");
            IFullHttpResponse result = HttpResponseHelper.GetHttpResponse(HttpResponseStatus.OK, actionResult.ToString(), headers);

            return(result);
        }
Example #3
0
        /// <summary>
        /// 获取Json返回
        /// </summary>
        /// <param name="actionResult"></param>
        /// <returns></returns>
        protected virtual IFullHttpResponse GetJsonResponse(object actionResult)
        {
            Dictionary <AsciiString, object> headers = HttpResponseHelper.GetDefaultHeaders("application/json;charset=utf-8");
            IFullHttpResponse result = HttpResponseHelper.GetHttpResponse(HttpResponseStatus.OK, actionResult.ToJson(), headers);

            return(result);
        }
Example #4
0
        /// <summary>
        /// 获得Options返回
        /// </summary>
        /// <param name="methodName"></param>
        /// <returns></returns>
        protected virtual IFullHttpResponse GetOptionsResponse(string methodName)
        {
            Dictionary <AsciiString, object> headers = HttpResponseHelper.GetDefaultHeaders();

            headers.Add(HttpHeaderNames.AccessControlAllowHeaders, "authorization,access-control-allow-origin,content-type");
            headers.Add(HttpHeaderNames.AccessControlAllowMethods, $"{methodName.ToUpper()}");
            IFullHttpResponse response = HttpResponseHelper.GetHttpResponse(HttpResponseStatus.OK, headers);

            return(response);
        }
Example #5
0
        /// <summary>
        /// 获取流返回
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        protected virtual async Task <IFullHttpResponse> GetStreamResponseAsync(Stream stream)
        {
            var bytes = new byte[stream.Length];
            await stream.ReadAsync(bytes, 0, bytes.Length);

            stream.Close();
            stream.Dispose();
            Dictionary <AsciiString, object> headers = HttpResponseHelper.GetDefaultHeaders("application/octet-stream");
            IFullHttpResponse result = HttpResponseHelper.GetHttpResponse(HttpResponseStatus.OK, bytes, headers);

            return(result);
        }
Example #6
0
 public override async Task HandlerAsync(IChannelHandlerContext ctx, IByteBufferHolder byteBufferHolder)
 {
     try
     {
         await HandlerAsync <IFullHttpRequest>(ctx, byteBufferHolder, HandlerRequestAsync);
     }
     catch (Exception exception)
     {
         OnException?.Invoke(exception);
         Dictionary <AsciiString, object> headers = HttpResponseHelper.GetDefaultHeaders("text/plain;charset=utf-8");
         IFullHttpResponse response = HttpResponseHelper.GetHttpResponse(HttpResponseStatus.InternalServerError, exception.Message, headers);
         await SendHttpResponseAsync(ctx, byteBufferHolder, response);
     }
 }
Example #7
0
        /// <summary>
        /// 处理异常
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="byteBufferHolder"></param>
        /// <param name="exception"></param>
        /// <returns></returns>
        protected virtual async Task HandlerExceptionAsync(IChannelHandlerContext ctx, IByteBufferHolder byteBufferHolder, Exception exception)
        {
            Dictionary <AsciiString, object> headers = HttpResponseHelper.GetDefaultHeaders("text/plain;charset=utf-8");
            IFullHttpResponse response = HttpResponseHelper.GetHttpResponse(HttpResponseStatus.InternalServerError, exception.Message, headers);

            IFilter[] globalFilters = _controllerBus.GetGlobalFilters();
            List <IExceptionFilter>      exceptionFilters      = globalFilters.OfType <IExceptionFilter>().ToList();
            List <IExceptionAsyncFilter> exceptionAsyncFilters = globalFilters.OfType <IExceptionAsyncFilter>().ToList();

            if (exceptionFilters.Count > 0 || exceptionAsyncFilters.Count > 0)
            {
                foreach (IExceptionFilter exceptionFilter in exceptionFilters)
                {
                    response = exceptionFilter.HandlerException(byteBufferHolder, exception);
                }
                foreach (IExceptionAsyncFilter exceptionFilter in exceptionAsyncFilters)
                {
                    response = await exceptionFilter.HandlerExceptionAsync(byteBufferHolder, exception);
                }
            }
            await SendHttpResponseAsync(ctx, byteBufferHolder, response);

            StopHandler();
        }