【问题标题】:Redirecting to subdomain from WebAPI controller - CORS required?从 WebAPI 控制器重定向到子域 - 需要 CORS?
【发布时间】:2014-01-05 10:19:43
【问题描述】:

目前,我的 WebAPI 控制器执行以下操作:

var newUrl = _adminService.Foo(bar);
return Request.CreateResponse(HttpStatusCode.OK, newUrl);

所以客户端收到一个字符串,然后用javascript设置window.location

这似乎是一种通过 WebAPI 重定向的 hacky 方式。我找到了这篇文章:

Redirect from asp.net web api post action

我已经实现的:

var newUrl = _adminService.Foo(bar);
var response = Request.CreateResponse(HttpStatusCode.Moved);
response.Headers.Location = new Uri(newUrl);
return response;

但现在我在 chrome 中收到以下错误(从 localhost 导航到子域时):

XMLHttpRequest cannot load http://test.localhost:3806/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3806' is therefore not allowed access.  

我需要为此配置 CORS 吗?

【问题讨论】:

  • 为什么要让服务(WebApi)强制客户端做任何事情?
  • @Maess 用户通过 webAPI 发布帖子,然后被重定向。与 MVC 控制器相同。
  • 为什么不使用 MVC 控制器?

标签: c# asp.net-web-api cors http-redirect


【解决方案1】:

是的,您必须使用 CORS,但并非所有浏览器都支持它。

here 有一个兼容性表和here IE 8/9 的一些限制、限制和解决方法

【讨论】:

    【解决方案2】:

    我需要为此配置 CORS 吗?

    是的,如果您的 javascript 托管在与您的 Web API 不同的域上,您确实需要。

    【讨论】:

    • 我很困惑 - 我没有在新方法中使用 javascript。我正在通过标头重定向。原始方法有效,但标头重定向无效。
    • 你没有使用javascript???那么错误消息中的XMLHttpRequest 来自哪里?这是 AJAX。
    • 我正在使用它,但是当我返回 redirect 响应时它不应该受到打击,对吧?我认为一旦浏览器看到“301”,它就会推送到指定的 URI ......但看起来我的 .fail 回调由于重定向标头而从原始页面中被击中。您在另一篇文章中的建议是否不适用于跨域重定向?
    • 为了能够从 AJAX 调用中命中服务器,该远程服务器必须支持 CORS。否则浏览器只会发出你看到的警告。您似乎已重定向到某些http://test.localhost:3806/,但是,无论在此地址上收听的内容不支持到http://localhost:3806 的CORS。如果您希望能够访问此http://test.localhost:3806/,则位于那里的脚本必须发送适当的 CORS 标头。
    • 了解-(感谢您的帮助)-我已启用 CORS,并且不再收到上述错误。控制器返回一个内容设置为新页面(子域)的有效负载,但浏览器中的重定向永远不会发生。失败回调是在原始页面(localhost)上命中。
    猜你喜欢
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2020-08-21
    • 1970-01-01
    • 2012-05-25
    • 2011-04-29
    相关资源
    最近更新 更多