/// <summary> /// 文件内容 /// </summary> /// <param name="isStaticsCached"></param> /// <param name="filePath"></param> /// <param name="contentType"></param> /// <param name="status"></param> public HttpFileResult(bool isStaticsCached, string filePath, string contentType = "", HttpStatusCode status = HttpStatusCode.OK) { if (isStaticsCached) { this.Content = StaticResourcesCache.GetOrAdd(filePath, filePath); } else { this.Content = FileHelper.Read(filePath); } this.ContentEncoding = Encoding.UTF8; this.ContentType = contentType; this.Status = status; }
public FileResult(string filePath, string contentType = "", HttpStatusCode status = HttpStatusCode.OK) { var data = StaticResourcesCache.GetOrAdd(filePath, (k) => { using (var fs = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { var buffer = new byte[fs.Length]; fs.Position = 0; fs.Read(buffer, 0, buffer.Length); return(buffer); } }); this.Content = data; this.ContentEncoding = Encoding.UTF8; this.ContentType = contentType; this.Status = status; }
public override IHttpResult GetActionResult() { string url = Request.Url; bool isPost = Request.Method == ConstHelper.POST; //禁止访问 var flist = WebConfig.ForbiddenAccessList; if (flist.Count > 0) { foreach (var item in flist) { if (url.IndexOf(item.ToUpper(), StringComparison.OrdinalIgnoreCase) >= 0) { return(new HttpContentResult("o_o,当前内容禁止访问!", System.Net.HttpStatusCode.Forbidden)); } if (System.Text.RegularExpressions.Regex.IsMatch(url, item)) { return(new HttpContentResult("o_o,当前内容禁止访问!", System.Net.HttpStatusCode.Forbidden)); } } } if (url == "/") { url = "/index.html"; } var filePath = Server.MapPath(url); if (StaticResourcesCache.Exists(filePath)) { if (StaticResourcesCache.IsBigFile(filePath)) { return(new HttpBigDataResult(filePath)); } else { return(new HttpFileResult(filePath, IsStaticsCached)); } } return(new HttpContentResult("o_o,找不到任何内容", System.Net.HttpStatusCode.NotFound)); }
public IHttpResult GetActionResult(HttpContext httpContext) { RouteTable routeTable = (RouteTable)this.Parma; string url = httpContext.Request.Url; bool isPost = httpContext.Request.Method == ConstHelper.POST; //禁止访问 var flist = httpContext.WebConfig.ForbiddenAccessList; if (flist.Any()) { foreach (var item in flist) { if (url.IndexOf(item, StringComparison.OrdinalIgnoreCase) >= 0) { return(new ContentResult("o_o,当前内容禁止访问!", System.Net.HttpStatusCode.Forbidden)); } if (System.Text.RegularExpressions.Regex.IsMatch(url, item, System.Text.RegularExpressions.RegexOptions.IgnoreCase)) { return(new ContentResult("o_o,当前内容禁止访问!", System.Net.HttpStatusCode.Forbidden)); } } } var arr = url.Split("/", StringSplitOptions.RemoveEmptyEntries); var filePath = string.Empty; NameValueCollection nameValues; switch (arr.Length) { case 0: filePath = httpContext.Server.MapPath(httpContext.WebConfig.HomePage); if (StaticResourcesCache.Exists(filePath)) { return(new FileResult(filePath, httpContext.IsStaticsCached)); } else { var d = RouteTable.Types.Where(b => (string.Compare(b.Name, httpContext.WebConfig.DefaultRoute.Name, true) == 0 || string.Compare(b.Name, httpContext.WebConfig.DefaultRoute.Name + ConstHelper.CONTROLLERNAME, true) == 0)).FirstOrDefault(); nameValues = httpContext.Request.Parmas.ToNameValueCollection(); return(MvcInvoke(httpContext, routeTable, d, httpContext.WebConfig.DefaultRoute.Value, nameValues, isPost)); } case 1: filePath = httpContext.Server.MapPath(url); if (StaticResourcesCache.Exists(filePath)) { return(new FileResult(filePath, httpContext.IsStaticsCached)); } break; default: var controllerName = arr[arr.Length - 2]; var first = RouteTable.Types.Where(b => string.Compare(b.Name, controllerName + ConstHelper.CONTROLLERNAME, true) == 0).FirstOrDefault(); if (first != null) { nameValues = httpContext.Request.Parmas.ToNameValueCollection(); return(MvcInvoke(httpContext, routeTable, first, arr[arr.Length - 1], nameValues, isPost)); } else { filePath = httpContext.Server.MapPath(url); if (StaticResourcesCache.Exists(filePath)) { return(new FileResult(filePath, httpContext.IsStaticsCached)); } } break; } return(new ContentResult("o_o,找不到任何内容", System.Net.HttpStatusCode.NotFound)); }
/// <summary> /// 根据地址路由到目标并返回执行结果 /// </summary> /// <returns></returns> public override IHttpResult GetActionResult() { string url = Request.Url; bool isPost = Request.Method == ConstHelper.POST; //禁止访问 var flist = WebConfig.ForbiddenAccessList; if (flist.Any()) { foreach (var item in flist) { if (url.IndexOf(item, StringComparison.OrdinalIgnoreCase) >= 0) { return(new ContentResult("o_o,当前内容禁止访问!url:" + url, System.Net.HttpStatusCode.Forbidden)); } if (System.Text.RegularExpressions.Regex.IsMatch(url, item, System.Text.RegularExpressions.RegexOptions.IgnoreCase)) { return(new ContentResult("o_o,当前内容禁止访问!url:" + url, System.Net.HttpStatusCode.Forbidden)); } } } var arr = url.Split("/", StringSplitOptions.RemoveEmptyEntries); var filePath = string.Empty; NameValueCollection nameValues; switch (arr.Length) { case 0: filePath = Server.MapPath(WebConfig.HomePage); if (string.IsNullOrWhiteSpace(filePath)) { new ContentResult($"o_o,找不到任何内容 url:{url} filePath:{filePath}", System.Net.HttpStatusCode.NotFound); } if (StaticResourcesCache.Exists(filePath)) { if (StaticResourcesCache.IsBigFile(filePath)) { return(new BigDataResult(filePath)); } else { return(new FileResult(filePath, IsStaticsCached)); } } else { if (RouteTable.Types == null) { return(new ContentResult("o_o,找不到任何路由信息!url:" + url, System.Net.HttpStatusCode.NotFound)); } var d = RouteTable.Types.Where(b => (string.Compare(b.Name, WebConfig.DefaultRoute.Name, true) == 0 || string.Compare(b.Name, WebConfig.DefaultRoute.Name + ConstHelper.CONTROLLERNAME, true) == 0)).FirstOrDefault(); nameValues = Request.Parmas.ToNameValueCollection(); return(MvcInvoker.InvokeResult(_routeTable, d, WebConfig.DefaultRoute.Value.ToString(), nameValues, isPost)); } case 1: filePath = Server.MapPath(url); if (StaticResourcesCache.Exists(filePath)) { if (StaticResourcesCache.IsBigFile(filePath)) { return(new BigDataResult(filePath)); } else { return(new FileResult(filePath, IsStaticsCached)); } } break; default: var controllerName = arr[arr.Length - 2]; if (RouteTable.Types != null && RouteTable.Types.Any()) { var first = RouteTable.Types.Where(b => string.Compare(b.Name, controllerName + ConstHelper.CONTROLLERNAME, true) == 0).FirstOrDefault(); if (first != null) { nameValues = Request.Parmas.ToNameValueCollection(); return(MvcInvoker.InvokeResult(_routeTable, first, arr[arr.Length - 1], nameValues, isPost)); } } filePath = Server.MapPath(url); if (StaticResourcesCache.Exists(filePath)) { if (StaticResourcesCache.IsBigFile(filePath)) { return(new BigDataResult(filePath)); } else { return(new FileResult(filePath, IsStaticsCached)); } } break; } return(new ContentResult("o_o,找不到任何内容 url:" + url, System.Net.HttpStatusCode.NotFound)); }