请求错误的脚本URL

时间:2013-11-05 12:16:50

标签: c# http razor nancy owin

我使用Self Hosting / 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,所以我尝试添加尾部斜杠,如果它丢失但是这不会改变任何东西(无论如何看起来像是黑客)

最好是我想让它工作而不必担心拖尾斜线。如果失败,我想我需要一种方法来修改初始响应,以便返回带有斜杠的http referrer标头?但是,如何做到这一点并不明显。

N.B。我的设置不是标准的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助手可能是一个选项,这就是我目前正在寻找解决问题的方法

1 个答案:

答案 0 :(得分:1)

因此,解决方案是创建一个帮助程序,以创建正确的脚本路径

/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 src=@Url.Script("jquery-1.6.4.min.js")></script>
  <script src=@Url.Script("jquery.signalR-2.0.0.min.js")></script>