【问题标题】:Wrong script url being requested请求的脚本 URL 错误
【发布时间】:2013-11-09 12:40:44
【问题描述】:

我正在使用 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 之前更改它,所以我尝试添加尾部斜杠(如果它丢失),但这并没有改变任何东西(无论如何似乎都是 hack)

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

注意我的设置不是标准的南希。有一些自定义的静态内容约定和视图位置约定被用来让它按我想要的方式工作。一切正常,除非尾部斜杠丢失。

这个帖子似乎在谈论同样的问题,但针对 ASP.NET

http://forums.asp.net/t/1897093.aspx?Trailing+Slash+Nightmare

更新 1

正如@AndreD 所建议的,使用

/log/Scripts/jquery-1.6.4.min.js

对这两种情况都有效,但是“log”是一个变量前缀,不能硬编码。一个 html 助手可能是一个选项,这就是我目前正在寻找解决问题的方法

【问题讨论】:

  • 您使用的是哪个版本的 Nancy?您使用的是什么 owin 服务器(katana、IIS、selfhost)?我在使用 kayak 时遇到了这种问题,但此时 kayak 与当前的 OWIN 版本不兼容。
  • 我使用的是自助主机。我在问题的顶部添加了一些细节
  • 我不知道 Nancy 框架或 OWIN,所以我发布的是评论而不是答案,但我怀疑这个问题与相对 URL 有关。如果基本路径是 /log 或 /log/,则 src="Scripts/jquery-1.6.4.min.js" 中使用的相对 URL 指的是完全不同的资源。
  • 如果您使用的是文档相对 URL,您可以尝试使用根相对 URL。换句话说,引用“/log/Scripts/jquery-1.6.4.min.js”而不是“Scripts/jquery-1.6.4.min.js”
  • 您使用的是什么视图引擎?在我的情况下,当我想在剃刀中添加脚本的链接或引用时,我使用 @Url.Content("~/Content/js/libs/jquery.min.js") 并且可以工作,也许您可​​以添加连接使用具有“log”值的变量。

标签: c# http razor nancy owin


【解决方案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>

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多