如何处理 MVC 跨站点 POST?

How do I handle an MVC Cross site POST?

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

我的控制器中有一个方法应该接受 POST 并将视图模型作为 POST 主体。我的页面正在从 Javascript 对其进行 ajax 调用。如果一切都在同一个域下,这就可以正常工作。

IE11 在我的 Ajax 第一次调用时发送一个没有 POST 正文的 OPTIONS 请求。 MVC 尝试路由它,找不到我的方法(可能是因为它采用 ViewModel 参数),并且 returns 是 404。但是在第一次调用出错后,后续调用包括 POST 主体并成功路由。

我认为我可以通过在我的控制器中包含我的方法的重载来轻松解决此问题,该重载不带参数并且 return 是 200(或 204)且没有消息正文。然而,这给了我 "The current request for action on controller type is ambiguous between the following action methods" 并列出了两个重载。

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

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

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

我必须在 Global.asax.cs

中处理 OPTIONS 请求