Nancy之给我们的网站添加自定义图标

news/2024/5/17 1:48:30/文章来源:https://blog.csdn.net/weixin_34242658/article/details/89586913
原文:Nancy之给我们的网站添加自定义图标

当我们在做一个网站时,可能经常会有这样一个需求,要给我们做的网站添加一个自定义的图标。

在Nancy中,默认是的下面这样

一个妹子的头像,其实也是挺好看的!!

那么当我们想要替换这个默认的,应该要怎么做呢?

下面就来看看具体的实现

首先,准备一张名为 favicon.ico或 favicon.png 图片

这里有两种实现方法提供参考

方法一:替换默认的图标(IRootPathProvider的实现)

如果我们是使用默认的IRootPathProvider的实现,这个时候,我们直接添加图片在我们的项目根目录即可

Nancy会去搜索这个默认的RootPath的favicon资源,它找到的第一个就将会是我们网站的图标。

效果如下:

有时候,默认的不一定是最好的,所以我们可以

自己去实现IRootPathProvider这个接口,但一个项目中,只能有一个实现(除了默认的)

具体如下

1     public class CustomRootPathProvider : IRootPathProvider
2     {
3         public string GetRootPath()
4         {     
5             return AppDomain.CurrentDomain.GetData(".appPath").ToString();
6         }
7     }  

其中,GetRootPath返回的是绝对路径!!

这个路径可以用你能想到的任何方式得到!

然后,我们需要在“引导程序”中做点事

1      protected override IRootPathProvider RootPathProvider
2         {
3             get { return new CustomRootPathProvider(); }
4         } 

这样做是比较保险的一种做法(不需要特地将我们的图片资源设置为嵌入的资源) 

方法二:使用嵌入的图标(Override FavIcon)

这种方法需要我们去重写 FacIcon这个方法

 1     protected override byte[] FavIcon
 2         {
 3             get { return this.favicon ?? (this.favicon = LoadFavIcon()); }       
 4         }
 5         private byte[] LoadFavIcon()
 6         {         
 7             using (var resourceStream = GetType().Assembly.GetManifestResourceStream("NancyFavIconDemo.favicon.ico"))
 8             {
 9                 var tempFavicon = new byte[resourceStream.Length];
10                 resourceStream.Read(tempFavicon, 0, (int)resourceStream.Length);
11                 return tempFavicon;
12             }
13         }  

 

其中,GetMainifestResourceStream的参数是“程序集名称.资源名称”(NancyFavIconDemo是我这个Demo的程序集名称,favicon.ico是我在根目录的一个图片)

还有重要的一步是

将我们的图片属性中的Build Action设置为 Embedded Resource(嵌入的资源)

具体原因我们可以参考Assembly.GetManifestResourceStream Method (String)里面的Remark

A manifest resource is a resource (such as an image file) that is embedded in the assembly at compile time. 

此时,我们同样可以看到相同的效果

如果 我们没有设置为嵌入的资源,那么我们的resourceStream对象将一直为空
下面我们来看看Nancy这一块内容的内部实现
关于favicon的实现就是在FavIconApplicationStartup.cs里面
来看看它的描述
就像前面说的,它会去找favicon,找到就用找到的,没找到就用默认的。
里面有一个带IRootPathProvider参数构造函数,可以简单理解为指定要搜索的范围。
1         /// <summary>
2         /// Initializes a new instance of the <see cref="FavIconApplicationStartup"/> class, with the
3         /// provided <see cref="IRootPathProvider"/> instance.
4         /// </summary>
5         /// <param name="rootPathProvider">The <see cref="IRootPathProvider"/> that should be used to scan for a favicon.</param>
6         public FavIconApplicationStartup(IRootPathProvider rootPathProvider)
7         {
8             FavIconApplicationStartup.rootPathProvider = rootPathProvider;
9         }

下面是默认的图标实现方法,我们override的实现和它的基本一致!!

 1         private static byte[] ExtractDefaultIcon()
 2         {
 3             var resourceStream =
 4                 typeof(INancyEngine).Assembly.GetManifestResourceStream("Nancy.favicon.ico");
 5 
 6             if (resourceStream == null)
 7             {
 8                 return null;
 9             }
10 
11             var result =
12                 new byte[resourceStream.Length];
13 
14             resourceStream.Read(result, 0, (int)resourceStream.Length);
15 
16             return result;
17         }    

默认图标在ErrorPipeline.cs和FormatterExtensions.cs之间(不细心去看,压根就看不见)

里面还有一个“搜索”图标的方法
 1          private static byte[] LocateIconOnFileSystem()
 2         {
 3             if (rootPathProvider == null)
 4             {
 5                 return null;
 6             }
 7 
 8             var extensions = new[] { "ico", "png" };
 9 
10             var locatedFavIcon = extensions.SelectMany(EnumerateFiles).FirstOrDefault();
11             if (locatedFavIcon == null)
12             {
13                 return null;
14             }
15 
16             try
17             {
18                 return File.ReadAllBytes(locatedFavIcon);
19             }
20             catch (Exception e)
21             {
22                 if (!StaticConfiguration.DisableErrorTraces)
23                 {
24                     throw new InvalidDataException("Unable to load favicon", e);
25                 }
26 
27                 return null;
28             }
29         }

我们可以发现,我们用的后缀可以是.ico和.png。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_752898.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

struts2架构网站漏洞修复详情与利用漏洞修复方案

struts2从开发出来到现在&#xff0c;很多互联网企业&#xff0c;公司&#xff0c;平台都在使用apache struts2系统来开发网站&#xff0c;以及应用系统&#xff0c;这几年来因为使用较多&#xff0c;被攻击者挖掘出来的struts2漏洞也越来越&#xff0c;从最一开始S2-001到现在…

借助 Lucene.Net 构建站内搜索引擎(上)

前言&#xff1a;最近翻开了之前老杨&#xff08;杨中科&#xff09;的Lucene.Net站内搜索项目的教学视频&#xff0c;于是作为老杨脑残粉的我又跟着复习了一遍&#xff0c;学习途中做了一些笔记也就成了接下来您看到的这篇博文&#xff0c;仅仅是我的个人笔记&#xff0c;大神…

php特级课---4、网站服务监控(常用网站服务监控软件有哪些)

php特级课---4、网站服务监控&#xff08;常用网站服务监控软件有哪些&#xff09; 一、总结 一句话总结&#xff1a;这些是架构师的知识 网络流量监控&#xff1a;cacti&#xff0c;mrtg 邮件报警系统&#xff1a;postfix 压力测试工具&#xff1a;Apache压力测试软件-ab&…

用户访问网站的过程

一.用户访问网站的过程 1.当用户访问一个网站时&#xff0c;都发生了什么&#xff1f; 概括如下&#xff1a; (1).利用DNS服务&#xff0c;将输入的域名解析为相应的IP地址 a.本地主机在输入域名后&#xff0c;会查询本地缓存信息和本地hosts b.本地主机会向远程LDNS服务器&…

go语言的服务发现、存储引擎、静态网站

go语言的服务发现、存储引擎、静态网站

03JavaScript程序设计修炼之道_2019-06-18_20-39-14_事件onloadonmouseoverout

02onload.html 03onmouseover&onmouseout.html 转载于:https://www.cnblogs.com/HiJackykun/p/11054778.html

修改chrome浏览器user-agent;在电脑上也能打开pad 或者 iphone 的专用网站

今天找了一个方法&#xff0c;可以修改chrome浏览器的user-agent &#xff1b;这样我们就 可以在电脑上访问 pad &#xff08; phone &#xff09;版的 gmail 或者 outlook 等。 1、 把chrome发送到桌面快捷方式&#xff0c;可以针对PAD 和PHONE 多建一些快捷方式。 2、 在快…

更好的网站 - 你知道网站被屏蔽了吗?

网站所有者应该知道的 - 你的网站被屏蔽了&#xff1f;

php网站点击特效代码,【seo优化】鼠标点击网站特效生成原理(附代码)

当前位置&#xff1a;首页 > SEO干货 正文2019年11月19日admin有朋友经常问&#xff0c;网站上点击出现爱国字眼是怎么做出来的&#xff0c;鼠标点击就显示“富强、民主、和谐”等24个词语&#xff0c;这样鼠标点击特效。下面来分享一下如何实现的。1&#xff0c;效果如下&…

树状结构搜索功能_事竟成科技,科普seo搜索引擎优化的做法

随着互联网的不断发展与普及&#xff0c;SEO成为一个企业宣传&#xff0c;选择推广的必要渠道&#xff0c;网络不同于其他大众传媒&#xff0c;网络具有广泛性&#xff0c;没有地域、行业、职务、生活背景、经济条件等等的限制。所以SEO排名直接影响了企业被展示的机会。要做优…

seo技术_基础知识_网站pr值的意义_SEO网站优化的通用策略有哪些!

seo不仅一种提高网站的权重的手段&#xff0c;更是网站运营的策略&#xff0c;seo策略直接关系到网站发展&#xff0c;不同的网站在执行上也略有差异&#xff0c;但是在还是有优化的程序都大同小异&#xff0c;下面为你介绍下网站优化通用的策略。第一步:分析对手1.确定你的竞争…

seo 伪原创_英文SEO采集伪原创软件Kontent Machine注册使用实战教程!

做跨境电商的童鞋们&#xff0c;总会遇到这样的问题&#xff1a;我们英文很差或者一般&#xff0c;无法写出精彩的原创英文文章进行SEO推广。这确实是很难的&#xff0c;即使许多商务英语过硬的都难以写出高质量英文原创文章&#xff0c;因为你不熟悉他们的生活环境&#xff0c…

php mysql 网站性能分析工具_MySQL profiling性能分析工具

MySQL 的 Query Profiler 是一个使用非常方便的 Query 诊断分析工具&#xff0c;通过该工具可以获取一条Query 在整个执行过程中 多种资源的简述&#xff1a;MySQL 的 Query Profiler 是一个使用非常方便的 Query 诊断分析工具&#xff0c;通过该工具可以获取一条Query 在整个执…

找网络高手联系方式_上海网络营销之SEO推广:原来SEO这样做才最有效

网络营销中&#xff0c;SEO因为成本低、效率高、获取的客户质量有保障&#xff0c;一直是各大企业最信赖、也最认可的一种营销方式。可是大多数的企业&#xff0c;却不懂如何运用SEO推广营销&#xff0c;更有甚者&#xff0c;贪图一时的利益&#xff0c;被某些黑心的互联网公司…

购买实体网站服务器,实体服务器购买

实体服务器购买 内容精选换一换已购买弹性云服务器ECS&#xff0c;具体操作请参见《弹性云服务器快速入门》。已购买弹性公网IP&#xff0c;并绑定到购买的弹性云服务器ECS上&#xff0c;具体操作请参见《弹性公网IP快速入门》登录AOM控制台&#xff0c;在左侧导航栏中选择“配…

辰光php客服系统源码_角点科技:购买的商城网站源码靠谱吗?

购买的商城网站源码靠谱吗?当下&#xff0c;商城网站开发越来越火&#xff0c;很多企业都想要开发一款商城网站&#xff0c;而不少企业在选择源码时&#xff0c;忽略了商城网站源码的重要性&#xff0c;从而造成损失&#xff0c;下面角点科技来为你讲解商城源码。1、商城网站源…

seo日常工作表_SEO日常工作内容主要有哪些

L氪迹在这里详细讲解SEO日常工作的主要内容以及各类工作内容重要性、频率和作用&#xff0c;下面进入主题:第一项:查看网站基本数据工作内容简述:快照、首页及其他页面重点词排名、整站关键词排名、权重、收录、友链稳定性&#xff1b;重要性:重要&#xff1b;频率:每天作用:检…

filestream写文件导致无法打开_网站配置文件删除导致网站无法正常访问

今天视频在线企业名录网站升级&#xff0c;升级后访问提示信息如下&#xff1a;500代码是内部服务器错误&#xff0c;同一个服务器的其他网站可以正常打开访问&#xff0c;这个网站https://www.0086freecall.com ,是专门做视频在线企业名录的一个网站&#xff0c;因为网站改版升…

404。服务器中未发现请求的 url。_SEO优化案例:服务器连接错误怎样解决?

降低动态网页加载太多的要求。如果网站提供的多个URL相同内容的&#xff0c;将被视为提供动态内容。动态网页的响应工作时间我们可能会很长&#xff0c;并会因此可以导致超时问题。或者&#xff0c;服务器可能会返回超载状态&#xff0c;蜘蛛抓取网站要求百度放缓。一般来说&am…

java仿qq_「java qq」仿QQ聊天软件java实现(一) - seo实验室

java qq之前学java通信的时候写过简单的通信程序&#xff0c;但比较简陋&#xff0c;于是重新写了一个仿照QQ的聊天软件&#xff0c;主要在界面上做了优化&#xff0c;增加了一些功能。实现的功能有注册、登录、好友列表、分组、黑名单、添加好友、群列表、创建群、添加群、聊天…