我正在使用自托管/ OWIN和Razor视图引擎运行Nancy
特别:
Nancy 0.21.1
Nancy.ViewEngines.Razor 0.21.1
Microsoft Owin.SelfHost 2.0.1
我有一个带有以下脚本参考的html页面
<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
如@AndreD所建议,使用
/log/Scripts/jquery-1.6.4.min.js
在两种情况下都可以使用,但是“ log”是变量前缀,不能进行硬编码。可以使用html helper,这是我目前正在寻找的解决问题的方法
因此,解决方案是创建一个可创建正确脚本路径的助手。
/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] 删除。
我来说两句