1

我正在尝试从 MVC api 返回一个 ActionResult,如果你在帖子正文中给它一个重定向 uri,它应该重定向那个 uri。现在,如果你不给它一个 uri,它的性能很好。但是,如果您给它一个 uri,它应该重定向到该 uri,它只会返回 302 并且不会在任何地方导航。

现在我认为我遇到的一个问题是响应标头中返回的位置是 MVC 的基本 URI,然后是输入 URI。我遇到的一个问题是,我发现的所有相关文档都很糟糕。

所以我的问题是如何使用 RedirectResult 操作实际重定向到不同的 URI?我还可以重定向到当前域之外的 URI 吗?我担心我不能,因为它将基本 URI 附加到响应中的位置。它不会强制客户端浏览器导航到另一个 URI。

这是我的行动结果。

    [AllowAnonymous]
    public ActionResult Dispatch(Dto.GoogleAnalyticsEvent evt)
    {
        log.DebugFormat("Dispatch()");
        if (evt.Redirect != null)
        {
            return new RedirectResult(evt.Redirect, false);
        }
        else
        {
            return Dispatch<Dto.GoogleAnalyticsEvent>(evt, _api.DispatchAnalyticsEvent, true);
        }
    }

如果您在帖子正文中给它一个 uri,这是返回的响应。响应码其实是一个 302 发现的。

Access-Control-Allow-Head...    Content-Type
Access-Control-Allow-Meth...    GET,POST
Cache-Control   private
Content-Length  139
Content-Type    text/html; charset=utf-8
Date    Wed, 22 May 2013 22:42:25 GMT
Location    /events/www.google.com
Server  Microsoft-IIS/7.5
access-control-allow-orig...    *

在此先感谢您的帮助。

澄清一下,我一直在寻找来自 API 的响应,以强制浏览器在响应时导航到 URI。虽然现在我大声输入,但似乎浏览器可能不允许这样做。发现 302 应该如何影响浏览器?

4

1 回答 1

2

如果您通过 AJAX(或其他形式的直接调用服务器)调用此操作,浏览器将无法知道服务器返回 302(或 40x、50x、200 或任何其他类型的响应)。

该行为与您为 AJAX 请求获得 200+ 数据响应完全相同 - 浏览器不会神奇地导航到该响应页面。

解决方案:如果您需要重定向作为 AJAX 请求的结果,您需要重新设计您的协议以返回一些 200 响应,上面写着“请重定向到此 Url”,并window.location.href在收到此类响应时在客户端进行相应设置。

请注意,AJAX 调用将遵循 302 重定向,调用结果将是您要重定向到的页面(如果在同一域上)或某种“访问被拒绝”,如果它是跨域且 CORS 未打开目的地。有关更多背景信息,请参阅如何使用 jQuery 防止 ajax 请求跟随重定向

于 2013-05-22T23:33:01.757 回答