由于项目需要,必须实现自定义的404页面进行美化,而这一块又被框架托管了,普通net core的方式无法实现404设置。
框架内部默认给404页面返回空白,查看源码后发现是在FrameworkServiceExtension->UseFrameworkService
中对404状态码进行了处理,知道了问题所在就比较好解决了。
在项目中的Program.cs里添加如下代码
x.Use(async (context, next) =>
{
await next.Invoke();
if (context.Response.StatusCode == 404)
{
Stream myStream = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "/404.html", FileMode.Open);
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");//若是格式为utf-8的需要将gb2312替换
StreamReader myStreamReader = new StreamReader(myStream, encode);
string strhtml = myStreamReader.ReadToEnd();
myStreamReader.Close();
await context.Response.BodyWriter.WriteAsync(Encoding.UTF8.GetBytes(strhtml).AsMemory());
}
});
然后在对应路径下添加404.html文件,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>这是一个自定义404页面</h1>
</body>
</html>
然后404页面的效果就可以随心所欲的修改了。
最终效果如下图
是对框架的404处理进行覆盖了嘛
@woneal 是的、框架是直接response.write(string.empty),覆盖之后可以自行实现404页面样式