gpt4 book ai didi

asp.net-mvc-4 - 缺少尾部斜杠的 MVC 错误行为的解决方法

转载 作者:行者123 更新时间:2023-12-02 20:10:09 27 4
gpt4 key购买 nike

这是在index.cshtml中。

<script>alert(window.location.href);</script>
<script
type="text/javascript"
src="~/Scripts/require.js"
data-main="App/main">
</script>

当 URL 缺少尾部斜杠时,此操作会失败。此 URL http://host/appname/ 会导致预期行为(浏览器加载/appname/App/main.js),但不带尾部斜杠的相同 URL 会导致浏览器尝试加载此内容/App/main.js 导致 404 未找到。

我尝试像这样构建它

<script>alert(window.location.href);</script>
<script
type="text/javascript"
src="~/Scripts/require.js"
data-main="@Url.Content("~/App/main")">
</script>

但这只会让问题变得更加明显;当存在尾部斜杠时,浏览器会继续工作,但现在当尾部斜杠不存在时,它会弹出一个充满原始 HTML 的消息对话框。

以下是一些可能的解决方案:

  • 将 IIS 配置为在到达 ASP.NET 之前附加尾部斜杠
  • 设置 MVC 应用以尽早检查并使用尾部斜杠进行重定向

让 IIS 来做这件事可能不是最好的计划。配置更改很有可能会导致系统其他方面出现问题,特别是对于多页面(非 SPA)MVC 应用程序。 REST 习惯将参数编码到 URL 中,就好像它们是资源路径一样,通常不使用尾部斜杠。

有人可能会争辩说,这种表示法比传统的 URL 参数编码没有增加任何内容,并且违反了 HTTP 规范(更不用说确实非常烦人了),但是这种类型的编码需要大量投资,因此服务器配置作为一种不太理想的配置。解决方案。

最佳答案

要在 MVC 应用程序中执行“礼貌重定向”,请打开主 Controller 并更新索引操作。就我而言,该应用程序是 Durandal SPA 应用程序,因此主要 Index 方法如下所示:

public class DurandalController : Controller
{
public ActionResult Index()
{
return View();
}
}

我们需要检查请求,并在必要时进行重定向。它最终看起来像这样:

public class DurandalController : Controller
{
public ActionResult Index()
{
var root = VirtualPathUtility.ToAbsolute("~/");
if ((root != Request.ApplicationPath) && (Request.ApplicationPath == Request.Path))
return Redirect(root + "#");
else
return View();
}
}

重定向在 SPA 应用程序的 session 生命周期中仅发挥一次作用,因为每个 session 仅从服务器加载一次。像这样实现它不会对其他 Controller 及其处理的 URL 产生任何影响。

关于asp.net-mvc-4 - 缺少尾部斜杠的 MVC 错误行为的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23486416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com