背景

web上如果图片不存在一般是打xx,这时候一般都是会设置默认的图片代替。现在用中间件的方式实现统一设置, 一次设置,全部作用 。

此示例演示如何解决在ASP.NET Core中找不到图像时设置默认图像

先决条件

  • Visual Studio 2017或更高版本。

  • 启用Visual Studio的ASP.NET Core开发组件。

实现方式

1、Startup 文件

app.UseDefaultImage(defaultImagePath: Configuration.GetSection("defaultImagePath").Value);

2、新建类DefaultImageMiddleware

using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Http;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Threading.Tasks;namespace conan.Saas.Framework.Middlewares{public class DefaultImageMiddleware{private readonly RequestDelegate _next;public static string DefaultImagePath { get; set; }public DefaultImageMiddleware(RequestDelegate next){this._next = next;}public async Task Invoke(HttpContext context){await _next(context);if (context.Response.StatusCode == 404){var contentType = context.Request.Headers["accept"].ToString().ToLower();if (contentType.StartsWith("image")){await SetDefaultImage(context);}}}private async Task SetDefaultImage(HttpContext context){try{string path = Path.Combine(Directory.GetCurrentDirectory(), DefaultImagePath);FileStream fs = File.OpenRead(path);byte[] bytes = new byte[fs.Length];await fs.ReadAsync(bytes, 0, bytes.Length);//this header is use for browser cache, format like: "Mon, 15 May 2017 07:03:37 GMT".//context.Response.Headers.Append("Last-Modified", $"{File.GetLastWriteTimeUtc(path).ToString("ddd, dd MMM yyyy HH:mm:ss")} GMT");await context.Response.Body.WriteAsync(bytes, 0, bytes.Length);}catch (Exception ex){await context.Response.WriteAsync(ex.Message);}}}public static class DefaultImageMiddlewareExtensions{public static IApplicationBuilder UseDefaultImage(this IApplicationBuilder app, string defaultImagePath){DefaultImageMiddleware.DefaultImagePath = defaultImagePath;return app.UseMiddleware<DefaultImageMiddleware>();}}}

3、appsettings.json 添加路径

 "defaultImagePath": "wwwroot\\DefaultImage.png",

4、最后在wwwroot放张DefaultImage.png图片即可

开源地址

https://github.com/conanl5566/Sampleproject

如何解决在ASP.NET Core中找不到图像时设置默认图像相关推荐

  1. 在 ASP.NET Core 中集成 Skywalking APM

    前言 大家好,今天给大家介绍一下如何在 ASP.NET Core 项目中集成 Skywalking,Skywalking 是 Apache 基金会下面的一个开源 APM 项目,有些同学可能会 APM ...

  2. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

  3. 使用Redis Stream来做消息队列和在Asp.Net Core中的实现

    Redis - Wikipedia 写在前面 我一直以来使用redis的时候,很多低烈度需求(并发要求不是很高)需要用到消息队列的时候,在项目本身已经使用了Redis的情况下都想直接用Redis来做消 ...

  4. ASP.NET Core 中的规约模式(Specification Pattern )——增强泛型仓储模式

    原文链接:https://codewithmukesh.com/blog/specification-pattern-in-aspnet-core/ 在本文中,我们将讨论在 ASP.NET Core ...

  5. 如何在 ASP.NET Core 中使用 HttpClientFactory ?

    ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...

  6. 如何在 ASP.Net Core 中使用 Autofac

    依赖注入可以有效的实现对象之间的 松耦合 并能够实现代码的可测试和可维护性,ASP.Net Core 提供了一个极简版的容器实现对 依赖注入 的原生支持,然而内置的依赖注入容器相比成熟的 依赖注入容器 ...

  7. 如何在 Asp.Net Core 中对请求进行限流

    译文链接:https://www.infoworld.com/article/3442946/how-to-implement-rate-limiting-in-aspnet-core.html 在应 ...

  8. 在ASP.NET Core中创建自定义端点可视化图

    在上篇文章中,我为构建自定义端点可视化图奠定了基础,正如我在第一篇文章中展示的那样.该图显示了端点路由的不同部分:文字值,参数,动词约束和产生结果的端点: 在本文中,我将展示如何通过创建一个自定义的D ...

  9. 在Asp.NET Core中如何优雅的管理用户机密数据

    在Asp.NET Core中如何优雅的管理用户机密数据 背景 回顾 在软件开发过程中,使用配置文件来管理某些对应用程序运行中需要使用的参数是常见的作法. 在早期VB/VB.NET时代,经常使用.ini ...

最新文章

  1. pandas高级处理-合并
  2. Linux下软件安装方法汇总
  3. 用神经网络二分类吸引子与排斥子
  4. RecyclerView高级控件-附实例【android专题】
  5. 网站优化记录-通过命令预编译Asp.net 网站,成功优化到毫秒级别。
  6. android百分比扩展枯,Android 增强版百分比布局库 为了适配而扩展
  7. Python的小数据存储,用什么格式更有逼格?
  8. hibernate的查询条件lt_鱼与熊掌得兼:Hibernate与Mybatis共存
  9. 鸿蒙OS电脑体验,华为鸿蒙OS体验抢先曝光!有多个更新版本,界面和安卓完全不同...
  10. 验证集准确率上不去_Python机器学习之“模型验证”
  11. 字符串(后缀自动机):COGS 2399. 循环同构
  12. 支付宝APP支付IOS手机端java后台版
  13. 华为路由器时间同步_华为路由器肿么和互联网时间同步
  14. php文本框代码_php怎么用代码给文本框输入值
  15. k8s-imagePullPolicy拉取策略
  16. WannaCry勒索病毒分析 **下**
  17. altera/xlinx pcie dma应用
  18. czl蒻蒟的OI之路6
  19. 全国各地的五十种面条大全
  20. qq公众平台出错了609_生鲜农贸行业订单容易出错,生鲜配送管理系统帮您来解决...

热门文章

  1. spring boot中servlet启动原理
  2. Spark技术内幕: Task向Executor提交的源代码解析
  3. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]
  4. mysql cookbook 1
  5. 点击User Profile Service Application 报错
  6. wifi名称可以有空格吗_收购公司后可以变更公司名称吗,变更公司名称和股权如何处理?...
  7. 禁用删除键退回历史记录_如何在Windows 8中删除或禁用搜索超级按钮历史记录
  8. 如何在Android Wear上节省电池寿命
  9. mysql qt自增_mysql自增设置
  10. 【前端基础进阶】JS-Object 功能详解