2013-12-17 36 views
0

目前,我的WebAPI控制器做到這一點:從WebAPI控制器重定向到子域 - 需要CORS嗎?

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

所以客戶端收到一個字符串,然後設置window.location用JavaScript。

這似乎是一個很好的方式來通過WebAPI重定向。我發現這個職位:

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; 

但現在我得到的鍍鉻以下錯誤(從本地主機導航到子域時):

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嗎?

+0

爲什麼你會希望有一個服務(的WebAPI)強制客戶端做什麼? – Maess

+0

@Mess用戶通過webAPI POST,然後重定向。與MVC控制器相同。 – RobVious

+0

爲什麼不使用MVC控制器? – Maess

回答

3

我需要爲此配置CORS嗎?

是的,如果您的JavaScript託管在與您的Web API不同的域上,您確實需要。

+0

我很困惑 - 我沒有使用新的方法使用JavaScript。我通過標題重定向。原始方法正在工作,但標題重定向不是。 – RobVious

+1

您未使用javascript? 「XMLHttpRequest」在錯誤消息中來自哪裏?這是AJAX。 –

+0

我正在使用它,但是當我返回'redirect'響應時它不應該被擊中,對吧?我認爲只要瀏覽器看到'301'就會推送到指定的URI ......但是看起來我的'.fail'回調因爲重定向頭部而從原始頁面被擊中。您的來自其他帖子的建議是否不適用於跨網域重定向? – RobVious

2

是的,你必須使用CORS,但不是所有的瀏覽器都支持它。

here存在兼容性表和here針對IE 8/9一些限制,限制和解決方法