这里我用的是.net Core 3.1 以下是核心代码
以下是Startup 下Configure的应用
public class RefuseStealingMiddleWare {//转载请保留http://www.luofenming.com/show.aspx?id=ART2020021000001 private readonly RequestDelegate _next; public RefuseStealingMiddleWare(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { string url = context.Request.Path.Value; if (url.Contains(".jpg")|| url.Contains(".png")) { string urlReferrer = context.Request.Headers["Referer"]; if (string.IsNullOrWhiteSpace(urlReferrer))//直接访问 { await this.SetForbiddenImage(context);//返回404图片 } else if (!urlReferrer.Contains("localhost"))//非当前域名 { await this.SetForbiddenImage(context);//返回404图片 } else { await _next(context);//走正常流程 } } else { await _next(context);//走正常流程 } } /// <summary> /// 设置拒绝图片 /// </summary> /// <param name="context"></param> /// <returns></returns> private async Task SetForbiddenImage(HttpContext context) { string defaultImagePath = "wwwroot/image/nopic.jpg"; 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); await context.Response.Body.WriteAsync(bytes, 0, bytes.Length); } }
以下是Startup 下Configure的应用
app.UseMiddleware<RefuseStealingMiddleWare>(); //注意 应用要放在最前面
直接防问网站上的图片连接, 就会显示我们设置指定的图片,如果还是原来图片就刷新一下.
源码下载链接:https://pan.baidu.com/s/1kvxDVgIpbXpI-uqKsggFZA 提取码:31st
视频讲解地址 https://www.bilibili.com/video/BV1bU4y1c7As