我使用Self Hosting / OWIN和Razor视图引擎运行Nancy
特别:
Nancy 0.21.1 Nancy.ViewEngines.Razor 0.21.1 Microsoft Owin.SelfHost 2.0.1
<script src="Scripts/jquery-1.6.4.min.js"></script>
如果我提出以下请求(请注意尾随斜杠)
http://localhost:3456/log/
正确返回html页面并发出以下脚本请求
http://localhost:3456/log/Scripts/jquery-1.6.4.min.js
这是正确的行为.
如果我然后发出此请求(请注意,没有斜杠)
http://localhost:3456/log
正确返回了html页面,但是发出了不同的脚本请求.
http://localhost:3456/Scripts/jquery-1.6.4.min.js
这会失败,因为它是错误的URL.该脚本需要在/ log下
Nancy允许你在处理之前更改URL,所以我尝试添加尾部斜杠,如果它丢失但是这不会改变任何东西(无论如何看起来像是hack)
我最好还是让它工作而不必担心拖尾斜线.如果失败,我想我需要一种方法来修改初始响应,以便返回带有斜杠的http referrer标头?但是,如何做到这一点并不明显.
注:我的设置不是标准的Nancy.有一些自定义静态内容约定和视图位置约定用于使它按我想要的方式工作.一切正常,除非缺少尾部斜杠.
这个线程似乎谈论同样的问题,但对于ASP.NET
http://forums.asp.net/t/1897093.aspx?Trailing+Slash+Nightmare
更新1
正如@AndreD所建议的,使用
/log/Scripts/jquery-1.6.4.min.js
是否适用于这两种情况,但“log”是一个变量前缀,不能进行硬编码.一个html助手可能是一个选项,这是我目前正在寻找解决问题的方法
解决方法
因此,解决方案是创建一个帮助程序,以创建正确的脚本路径
/log/Scripts/jquery-1.6.4.min.js
助手类扩展
*SomeNamespace* public static class UrlHelpers { public static string Script<TModel>(this Nancy.ViewEngines.Razor.UrlHelpers<TModel> Self,string Script) { var rootPath = Self.RenderContext.Context.Request.Path.TrimEnd('/'); var scriptPath = string.Format("{0}/Scripts/{1}",rootPath,Script); return scriptPath; } }
视图:
@using SomeNamespace @inherits Nancy.ViewEngines.Razor.NancyRazorViewBase ... ... <script [email protected]("jquery-1.6.4.min.js")></script> <script [email protected]("jquery.signalR-2.0.0.min.js")></script>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。