如何处理MVC Cross站点POST?

时间:2016-01-08 21:28:09

标签: ajax asp.net-mvc-routing cross-site

我必须在MVC项目中处理来自Ajax调用的跨站点POSTS。

我的控制器中有一个方法,它应该接受POST,视图模型作为POST主体。我的页面正在通过Javascript对它进行ajax调用。如果所有内容都在同一个域下,这样可以正常工作。

IE11在第一次进行Ajax调用时发送一个没有POST主体的OPTIONS请求。 MVC尝试路由它,无法找到我的方法(可能因为它接受了ViewModel参数),并返回404.但是,在第一次调用错误之后,后续调用包括POST主体并成功路由。

我认为我可以通过在我的控制器中包含我的方法的重载来轻松解决这个问题,该方法不带参数并返回200(或204)且没有消息体。然而,这给了我"当前对控制器类型的操作请求在以下操作方法之间是不明确的"并列出两个重载。

正确路由的最佳方法是什么?如果我使用null ViewModel到达我的控制器方法,我可以返回200/204并且可能没问题 - 但是我没有到达那里,路由发回404。

1 个答案:

答案 0 :(得分:0)

解决了这个问题。 CORS需要两件事,您需要所有响应都包含Access-Control-Allow-Origin标头,并且您需要响应OPTIONS请求(使用200或204)。

我的OPTIONS请求未正确路由,返回带有Access-Control-Allow-Origin标头的404,这导致错误但允许下一个请求在没有OPTIONS请求的情况下工作。

我必须处理Global.asax.cs中的OPTIONS请求