优化功能,新增全局过滤实现静态资源加载

This commit is contained in:
2025-09-22 17:19:34 +08:00
parent 01774452cb
commit 9a89a138dd
5 changed files with 78 additions and 233 deletions

View File

@@ -4,8 +4,8 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>展板数据配置</title> <title>展板数据配置</title>
<link rel="favicon" href="/favicon.ico" type="image/x-icon"> <link rel="favicon" href="/static/favicon.ico" type="image/x-icon">
<link href="layui/css/layui.css" rel="stylesheet"> <link href="/static/layui/css/layui.css" rel="stylesheet">
<style> <style>
.container { .container {
display: flex; display: flex;
@@ -260,8 +260,8 @@
</form> </form>
<!-- 请勿在项目正式环境中引用该 layui.js 地址 --> <!-- 请勿在项目正式环境中引用该 layui.js 地址 -->
<script src="layui/layui.js"></script> <script src="/static/layui/layui.js"></script>
<script src="jquery/jquery-1.9.1.min.js"></script> <script src="/static/jquery/jquery-1.9.1.min.js"></script>
<script> <script>
layui.use(['form', 'laydate', 'util'], function () { layui.use(['form', 'laydate', 'util'], function () {
var form = layui.form; var form = layui.form;

View File

@@ -1,155 +0,0 @@
using Microsoft.AspNetCore.Mvc;
using System.Web.Http;
namespace .Controller
{
public class AmazeUIController : BaseController
{
#region css
[HttpGet, Route("AmazeUI/css/admin.css")]
public ActionResult Index()
{
return Resouce("/AmazeUI/css/admin.css", "text/css");
}
[HttpGet, Route("AmazeUI/css/amazeui.css")]
public ActionResult AmazeuiCSS()
{
return Resouce("/AmazeUI/css/amazeui.css", "text/css");
}
[HttpGet, Route("AmazeUI/css/amazeui.flat.css")]
public ActionResult AmazeuiFlatCss()
{
return Resouce("/AmazeUI/css/amazeui.flat.css", "text/css");
}
[HttpGet, Route("AmazeUI/css/amazeui.flat.min.css")]
public ActionResult AmazeuiFlatMinCSS()
{
return Resouce("/AmazeUI/css/amazeui.flat.min.css", "text/css");
}
[HttpGet, Route("AmazeUI/css/amazeui.min.css")]
public ActionResult AmazeuiMinCSS()
{
return Resouce("/AmazeUI/css/amazeui.min.css", "text/css");
}
[HttpGet, Route("AmazeUI/css/app.css")]
public ActionResult AppCSS()
{
return Resouce("/AmazeUI/css/app.css", "text/css");
}
#endregion
#region fonts
[HttpGet, Route("AmazeUI/fonts/FontAwesome.otf")]
public ActionResult FontAwesomeotf()
{
return Resouce("/AmazeUI/fonts/FontAwesome.otf", "font/otf");
}
[HttpGet, Route("AmazeUI/fonts/fontawesome-webfont.eot")]
public ActionResult fontawesome_webfont_eot()
{
return Resouce("/AmazeUI/fonts/fontawesome-webfont.eot", "font/eot");
}
[HttpGet, Route("AmazeUI/fonts/fontawesome-webfont.ttf")]
public ActionResult fontawesome_webfont_ttf()
{
return Resouce("/AmazeUI/fonts/fontawesome-webfont.ttf", "font/ttf");
}
[HttpGet, Route("AmazeUI/fonts/fontawesome-webfont.woff")]
public ActionResult fontawesome_webfont_woff()
{
return Resouce("/AmazeUI/fonts/fontawesome-webfont.woff", "font/woff");
}
[HttpGet, Route("AmazeUI/fonts/fontawesome-webfont.woff2")]
public ActionResult fontawesome_webfont_woff2()
{
return Resouce("/AmazeUI/fonts/fontawesome-webfont.woff2", "font/woff2");
}
#endregion
#region i
[HttpGet, Route("AmazeUI/i/app-icon72x72@2x.png")]
public ActionResult app_icon72x72_2x_png()
{
return Resouce("/AmazeUI/i/app-icon72x72@2x.png", "image/png");
}
[HttpGet, Route("AmazeUI/i/favicon.png")]
public ActionResult favicon_png()
{
return Resouce("/AmazeUI/i/favicon.png", "image/png");
}
[HttpGet, Route("AmazeUI/i/startup-640x1096.png")]
public ActionResult startup_640x1096_png()
{
return Resouce("/AmazeUI/i/startup-640x1096.png", "image/png");
}
#endregion
#region JS
[HttpGet, Route("AmazeUI/js/amazeui.ie8polyfill.js")]
public ActionResult amazeui_ie8polyfill_js()
{
return Resouce("/AmazeUI/js/amazeui.ie8polyfill.js", "application/javascript");
}
[HttpGet, Route("AmazeUI/js/amazeui.ie8polyfill.min.js")]
public ActionResult amazeui_ie8polyfill_min_js()
{
return Resouce("/AmazeUI/js/amazeui.ie8polyfill.min.js", "application/javascript");
}
[HttpGet, Route("AmazeUI/js/amazeui.js")]
public ActionResult amazeui_js()
{
return Resouce("/AmazeUI/js/amazeui.js", "application/javascript");
}
[HttpGet, Route("AmazeUI/js/amazeui.min.js")]
public ActionResult amazeui_min_js()
{
return Resouce("/AmazeUI/js/amazeui.min.js", "application/javascript");
}
[HttpGet, Route("AmazeUI/js/amazeui.widgets.helper.js")]
public ActionResult amazeui_widgets_helper_js()
{
return Resouce("/AmazeUI/js/amazeui.widgets.helper.js", "application/javascript");
}
[HttpGet, Route("AmazeUI/js/amazeui.widgets.helper.min.js")]
public ActionResult amazeui_widgets_helper_min_js()
{
return Resouce("/AmazeUI/js/amazeui.widgets.helper.min.js", "application/javascript");
}
[HttpGet, Route("AmazeUI/js/app_js")]
public ActionResult app_js()
{
return Resouce("/AmazeUI/js/app_js", "application/javascript");
}
[HttpGet, Route("AmazeUI/js/handlebars.min.js")]
public ActionResult handlebars_min_js()
{
return Resouce("/AmazeUI/js/handlebars.min.js", "application/javascript");
}
#endregion
}
}

View File

@@ -19,24 +19,19 @@ namespace 电子展板.Controller
public class IndexController : BaseController public class IndexController : BaseController
{ {
/// <summary> /// <summary>
/// 后台首页视图。 /// 主界面
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpGet, Route("")] [HttpGet, Route(""), Route("index.html")]
public ActionResult Index() public ActionResult Index()
{ {
return Resouce("/Views/Index.html", "text/html"); return Resouce("/Views/Index.html", "text/html");
} }
#region css /// <summary>
[HttpGet, Route("favicon.ico")] /// 获得配置信息
public ActionResult Favicon_ICO() /// </summary>
{ /// <returns></returns>
return Resouce("/favicon.ico", "image/x-icon");
}
#endregion
[HttpGet, Route("getConfig")] [HttpGet, Route("getConfig")]
public ActionResult GetConfig() public ActionResult GetConfig()
{ {
@@ -45,7 +40,7 @@ namespace 电子展板.Controller
/// <summary> /// <summary>
/// 上传头像 /// 上传图片
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPost, Route("uploadImage")] [HttpPost, Route("uploadImage")]
@@ -68,6 +63,11 @@ namespace 电子展板.Controller
} }
/// <summary>
/// 图形显示
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet, Route("Upload/{id}")] [HttpGet, Route("Upload/{id}")]
public ActionResult GetUploadFile([FromUri] string id) public ActionResult GetUploadFile([FromUri] string id)
{ {
@@ -77,6 +77,11 @@ namespace 电子展板.Controller
} }
/// <summary>
/// 保存配置文件
/// </summary>
/// <param name="config"></param>
/// <returns></returns>
[HttpPost, Route("save")] [HttpPost, Route("save")]
public ActionResult Save([FromBody] MyConfig config) public ActionResult Save([FromBody] MyConfig config)
{ {
@@ -89,6 +94,7 @@ namespace 电子展板.Controller
propertyInfo.SetValue(GlobalVariable.Config, value); propertyInfo.SetValue(GlobalVariable.Config, value);
} }
GlobalVariable.SaveConfig(); GlobalVariable.SaveConfig();
//保存并修改界面
EventBus.Instance.Publish("save", ""); EventBus.Instance.Publish("save", "");
return Success(); return Success();
} }

View File

@@ -1,62 +0,0 @@
using Microsoft.AspNetCore.Mvc;
using System.Web.Http;
namespace .Controller
{
public class LayUIController : BaseController
{
#region css
[HttpGet, Route("layui/css/layui.css")]
public ActionResult Index()
{
return Resouce("/layui/css/layui.css", "text/css");
}
#endregion
#region fonts
[HttpGet, Route("layui/font/iconfont.eot")]
public ActionResult Iconfont_eot()
{
return Resouce("/layui/font/iconfont.eot", "font/eot");
}
[HttpGet, Route("layui/font/iconfont.svg")]
public ActionResult iconfont_svg()
{
return Resouce("/layui/font/iconfont.svg", "text/xml");
}
[HttpGet, Route("layui/font/iconfont.ttf")]
public ActionResult iconfont_ttf()
{
return Resouce("/layui/font/iconfont.ttf", "font/ttf");
}
[HttpGet, Route("layui/font/iconfont.woff")]
public ActionResult iconfont_woff()
{
return Resouce("/layui/font/iconfont.woff", "font/woff");
}
[HttpGet, Route("layui/font/iconfont.woff2")]
public ActionResult iconfont_woff2()
{
return Resouce("/layui/font/iconfont.woff2", "font/woff2");
}
#endregion
#region JS
[HttpGet, Route("layui/layui.js")]
public ActionResult layui_js()
{
return Resouce("/layui/layui.js", "application/javascript");
}
#endregion
[HttpGet, Route("jquery/jquery-1.9.1.min.js")]
public ActionResult jquery_1_9_1_min()
{
return Resouce("/jquery/jquery-1.9.1.min.js", "application/javascript");
}
}
}

View File

@@ -1,19 +1,28 @@
using Beginor.Owin.StaticFile; using Beginor.Owin.StaticFile;
using JinianNet.JNTemplate; using JinianNet.JNTemplate;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Owin;
using Microsoft.Owin.Hosting; using Microsoft.Owin.Hosting;
using Owin; using Owin;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Configuration; using System.Configuration;
using System.IO;
using System.Linq; using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Formatting; using System.Net.Http.Formatting;
using System.Net.Http.Headers;
using System.Net.Mime;
using System.Text; using System.Text;
using System.Text.Json.Nodes;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Web.Http; using System.Web.Http;
using .Utility.Core;
using .Utility.Extension; using .Utility.Extension;
using .Utility.Logs; using .Utility.Logs;
using static System.Net.Mime.MediaTypeNames;
using static System.Windows.Forms.VisualStyles.VisualStyleElement; using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace namespace
@@ -57,6 +66,8 @@ namespace 电子展板
_config.MapHttpAttributeRoutes(); _config.MapHttpAttributeRoutes();
_config.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); _config.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
_config.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("datatype", "json", "application/json")); _config.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("datatype", "json", "application/json"));
//全局拦截
app.Use<ResouceStaticRoute>("/static", "/Assets");
app.UseWebApi(_config); app.UseWebApi(_config);
//配置模板引擎 //配置模板引擎
Engine.Configure(c => Engine.Configure(c =>
@@ -67,4 +78,49 @@ namespace 电子展板
}); });
} }
} }
public class ResouceStaticRoute : OwinMiddleware
{
private string route;
private string resources;
public ResouceStaticRoute(OwinMiddleware next, string route, string resources) : base(next)
{
this.route = route;
this.resources = resources;
}
public override async Task Invoke(IOwinContext context)
{
try
{
string method = context.Request.Method;//GET POST
string path = context.Request.Path.ToString();
if (method.ToUpper() == "GET" && path.StartsWith(route))
{
string resourePath = path.Replace(route, "");
string packUri = $"pack://application:,,,{resources}{resourePath}";
byte[] bytes = null;
using (Stream stream = System.Windows.Application.GetResourceStream(new Uri(packUri, UriKind.RelativeOrAbsolute)).Stream)
{
bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
}
context.Response.ContentType = System.Web.MimeMapping.GetMimeMapping(path);
context.Response.Write(bytes, 0, bytes.Length);
await Task.FromResult(0);
}
await Next.Invoke(context);
}
catch (InvalidCastException ex)
{
await Next.Invoke(context);
}
catch (Exception ex)
{
await Next.Invoke(context);
}
}
}
} }