2016-01-08 42 views
0

我必須在MVC項目中處理來自Ajax調用的跨站點POSTS。如何處理MVC Cross網站POST?

我有一個方法在我的控制器,應該接受與視圖模型作爲POST正文的POST。我的頁面正在從Javascript調用Ajax。這工作正常,如果一切都在同一個域。

IE11在第一次發起Ajax調用時發送沒有POST主體的OPTIONS請求。 MVC嘗試路由此,無法找到我的方法(可能是因爲它採用ViewModel參數),並返回404。但是,在第一次調用錯誤後,後續調用包括POST正文併成功路由。

我想我可以很容易地解決這個問題,方法是在我的控制器中包含一個重載的方法,它不接受任何參數,並返回一個200(或204)並且沒有消息體。但是,這給了我「當前對控制器類型的操作請求在以下操作方法之間不明確」,並列出了兩個重載。

什麼是最好的方式來正確路由?如果我得到我的控制器方法與一個null ViewModel,我可以返回一個200/204,可能會好起來 - 但我不到達那裏,路由回發一個404.

+0

您是否啓用了CORS? http://stackoverflow.com/questions/19095777/how-to-support-http-options-verb-in-asp-net-mvc-webapi-application –

+0

是的。沒有CORS,所有跨站請求都會失敗。使用CORS,只有第一個請求失敗。 – Brad

回答

0

解決了這個問題。 CORS需要2件事,你需要所有的響應來包含Access-Control-Allow-Origin頭,你需要響應OPTIONS請求(使用200或204)。

我的OPTIONS請求路由不正確,返回一個帶有Access-Control-Allow-Origin頭部的404,這導致了錯誤,但允許下一個請求在沒有OPTIONS請求的情況下工作。

我必須處理我的Global.asax.cs中的OPTIONS請求