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

news/2024/5/13 18:39:07/文章来源:https://blog.csdn.net/weixin_33694172/article/details/85991278
原文: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_787854.aspx

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

相关文章

php连接oracle很慢是什么原因_网站的打开速度很慢一般是什么原因?

网站打开速度慢会直接影响到网站的质量&#xff0c;会影响用户体验这个不有多说了&#xff0c;还有一个非常不好的地方是影响了搜索引擎。一个网站的打开速度慢&#xff0c;一般来说主要有这几个原因&#xff1a;网站的程序问题、网站服务器的问题、网站带宽的问题、网站被攻击…

JAVA软件图片浏览下载_图像处理软件imagej电脑版-图像处理软件imagej下载v1.8.0-IE浏览器中文网站...

imagej是一款图像处理软件&#xff0c;支持Windows和Mac平台操作系统&#xff0c;软件由Java语言写成&#xff0c;可以编辑、浏览、打印多种格式图片&#xff0c;大家还能为它添加不同的插件&#xff0c;解锁更多功能。软件特色ImageJ是一个基于java的公共的图像处理软件&#…

谷歌新上线了一个安卓游戏开发者网站

谷歌为 Android 游戏开发者上线了一个网站。新网站自称 Android 游戏开发“中心”&#xff0c;目的在于帮助开发者为 Android 系统开发更有趣的手游。该网站可以帮助开发者寻找资源和工具&#xff0c;提高开发者在每个阶段的成功率&#xff0c;从而建立持续可盈利的业务。 网站…

解决网站无法访问的问题

1. vim /etc/apache2/apache2.conf <Directory /path/to/mysite>Options Indexes FollowSymLinksAllowOverride NoneRequire all granted </Directory> 3. 更改目录权限 chomod 755 /path/to/mysite (父级目录也要改&#xff01;) 2.卸载&#xff0c;安装 apt-get…

php特级课---3、常用的网站加速技术有哪些

php特级课---3、常用的网站加速技术有哪些 一、总结 一句话总结&#xff1a;网站加速技术是一组技术的组合&#xff0c;来提升网站的速度 1.Squid代理缓存技术 2.页面静态化缓存 3.Memcache 4.Sphinx搜索加速 1、squid的作用是什么&#xff08;squid动静分离&#xff09;&#…

Apache主导全美100大网站

随着同 IIS 的竞争以及 Lighttpd 的崛起&#xff0c;关于 Apache 市场下滑的声音不绝于耳&#xff0c;但 Pingdom 的统计表明&#xff0c;Apache仍然主导全美100大网站&#xff0c;占据了49%的市场份额。 在 Pingdom 检测的众多网站中&#xff0c;Web服务器的使用五花八门&…

看看什么叫真正的网站地图

日本的 iA 公司最近发布了V3版 Web 地图&#xff0c;这是一个以东京地铁路线为蓝本的地图&#xff0c;将全球最有影响力的站点分门别类分布到不同的线路中&#xff0c;沿着一条线路&#xff0c;你可以依次看到某一类型的网站的分布&#xff0c;比如&#xff0c;技术站点&#x…

5个最好的在线文件共享网站

lifehacker.com 最近从200个提名中评选出最好的5个在线文件共享服务&#xff0c;这些容量大&#xff0c;速度快&#xff0c;容易使用的在线服务可以帮助你和朋友一起分享音乐&#xff0c;也可以帮助你和同事共享某个重要文档。 Box.net 提供1G免费空间的 Box.net 以其简洁的界…

个人网站

个人网站&#xff1a;http://flyoung.top/ 微信公众号&#xff1a;杨飞18603854251 扫码关注&#xff1a;转载于:https://www.cnblogs.com/flyoung/p/9055258.html

IIS服务器发布ASP.NET的网站出现500.19错误

509.19 0x80070021:配置文件不可用&#xff0c;有可能是文件路径的问题-》把网站路径换下试试 也有可能是文件夹权限的问题-》右键 文件夹安全-》添加权限 Framework没有完全安装&#xff0c;已管理员身份启动命令工具&#xff0c;粘贴上 %windir%/Microsoft.NET/Framework/v4.…

使用github的域名上传个人网站

注&#xff1a;github.io的域名用来存放静态网页 1.新建一个库&#xff0c;用来存放我们网页文件&#xff0c;库的名字必须是 github用户名.github.io 比如我的库名&#xff1a;winycg.github.io 2.在本地新建一个名为WebPage_github的git版本库&#xff0c;用以连接远程的w…

10个最好的照片分享网站

照片分享市场在稳步发展&#xff0c;新的服务层出不穷。ReadWriteWeb 的编辑们为我们筛选了10个最好的照片分享网站&#xff0c;还提供了一个非常详细的功能分布表展示不同网站所提供的不同功能。 Flickr 在 Web 2.0 世界&#xff0c;Yahoos Flickr 可能是最知名的照片分享站点…

用 Google 帐户登陆其它网站

Google 发布了一个 API&#xff0c;允许其它网站用 Google 自己的帐户登陆&#xff0c;Google 今年年初曾宣布&#xff0c;他们将同 Yahoo, 微软等公司一样&#xff0c;成为 OpenID 身份提供商。 第一个使用 Google 帐户登陆的大型网站为 Zoho&#xff0c;这个在线 Office 套件…

48 个设计出众的网站 Favicon

Favicon 是显示在地址栏上的网站的视觉标志&#xff0c;也用作网站书签图标。Favicon 可以帮助访问者对你的网站内容有一个视觉印象&#xff0c;除此之外&#xff0c;Favicon 很好看&#xff0c;一个设计出众的 Favicon 本身是一种视觉享受&#xff0c;Smashing Magazine 曾发表…

白宫网站改版之深度剖析

美国政府是一个品牌&#xff0c;当白宫易主&#xff0c;人们希望看到一些新东西。这不是换个招牌那么简单&#xff0c;人们期待奥巴马兑现精选时的诺言&#xff0c;虽然这一切需要时间&#xff0c;不过&#xff0c;人们已经从白宫网站的改版中看到了巨大的变化。本文对新的白宫…

德国网站评选100个最佳字体

这是德国 FontShop 网站评选的有史以来100个最佳字体。 评判基于三个标准&#xff0c;在 FontShop 的销量&#xff08;权重40%&#xff09;&#xff0c;历史价值&#xff08;权重30%&#xff09;&#xff0c;美学价值&#xff08;30%&#xff09;&#xff0c;同时&#xff0c;所…

字体的故事之:Museo 字体设计者访谈录

2008 年的 Web 设计领域&#xff0c;有一款全新设计的字体 Museo 迅速获得众多设计师的青睐&#xff0c;并一跃进入 MyFonts.com 2008 年10 大年度字体之列。这款字体的设计者名叫 Jos Buivenga, Webdesigner Depot 近日对他进行了访谈&#xff0c;谈到了这款字体的设计过程&am…

哪个家伙说“网站去.Net化”?

上个月&#xff0c;JavaEye创始人范凯robbin的一篇博客 《对.NET系统架构改造的一点经验和教训》 引起了大讨论&#xff0c;里面提到了京东“去.Net化”、“CSDN去.Net化”之类的词刺激到了一些人的神经&#xff0c;有的人在评论中破口大骂“.Net最牛逼&#xff0c;.Net搞不好是…

默多克:报纸网站应该收费

Rupert Murdoch &#xff08;默多克&#xff09;一直致力于维护新闻业的商业模式&#xff0c;他期待在未来一年内&#xff0c;报业可以对其旗下的新闻网站收费。受 Wall Street Journal 大量在线订阅收入的鼓舞&#xff0c;这个媒体大王兼亿万富翁昨晚表示&#xff0c;报业最终…