【问题标题】:Ensuring correct URL path with MVC使用 MVC 确保正确的 URL 路径
【发布时间】:2013-05-31 00:22:45
【问题描述】:

我有一个在 IIS 内的子应用程序中运行的 MVC 站点,该站点在初始加载后执行 Ajax 请求以获取其他内容。

问题在于,如果用户未能在 URL 末尾输入尾随“/”,则 AJAX 请求将失败,因为 XHR 对象在请求的 URL 前面添加了一个“/”。这导致它进入根域并离开应用程序区域。

下面是一个 Fiddler 跟踪显示我的意思。

前 3 个条目显示了一个基本的 HTML 站点,我设置该站点以查看 MVC 环境之外发生的情况。在这种情况下,如果未提供尾部“/”,IIS 将重定向到带有尾部斜杠的 URL。随后的 AJAX 请求就会成功。

在接下来的 2 个条目中,在 MVC 中,不会发出重定向,然后 AJAX 请求会失败。如果缺少尾随“/”,有没有办法在 MVC 场景中获得 301 重定向(最好来自 IIS)?

【问题讨论】:

    标签: ajax asp.net-mvc iis


    【解决方案1】:

    您可以配置 IIS URL 重写模块来执行您需要的操作。查看this page上的第一项(我找到的第一个搜索结果)。

    我建议的另一个选择是您可以使用@Url.Action("action", "controller") 之类的东西生成您的ajax 请求,我认为这应该为您解决斜线问题。如果您这样做,那么您的应用的托管方式将无关紧要,它应该可以正常工作。

    一个更完整的例子,使用 jQuery:

    $.ajax({
        type: "POST",
        url: @Url.Action("action", "controller"),
        data: $("form").serialize(),
        success: function (result) {
            ...
        },
        failure: function () {
            ...
        }
    });
    

    【讨论】:

    • 谢谢,我会尝试重写 URL 看看是否可行。我认为在这种情况下我不能使用 Url.Action,因为代码在外部 JS 文件中。
    • URL 重写似乎不起作用,因为它不会重写应用程序的根 URL。在 URL 重写模块的配置中,它实际上是说它在 /ClientPortal/ 之后匹配,所以如果用户提供 /ClientPortal 它保持不变。
    猜你喜欢
    • 1970-01-01
    • 2019-07-11
    • 2019-08-06
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2012-01-09
    • 1970-01-01
    相关资源
    最近更新 更多