1

我以前也问过类似的问题,但我终于找到了问题的根源。我在 VS 2010 中有两个项目的解决方案。一个项目是一个 mvc 4 应用程序,它对第二个 WebAPI 项目进行休息调用,现在即使这些项目在同一个解决方案中,我在使用 IE 以外的任何东西时都会遇到同源策略错误,我相信这与事实上,每个项目都是在单独的开发服务器实例上启动的,但我不确定。

有人可以向我解释一个解决方案,我可以让这两个项目都运行而不会遇到相同的来源错误吗?(相关的问题,如果我想公开我的 api 以供公众使用,怎么会有人使用它而不会出现同样的错误?)

4

2 回答 2

3

您将需要在您的主 MVC4 应用程序中创建一个瘦代理层,用于创建HttpRequestWebClient调用您的 WebAPI 项目。

所以你的Javascript会调用类似的东西

http://samedomain/proxy/getproduct/29

然后,您的 ProxyController 的 GetProduct 操作应该对实际的 WebAPI URL 进行 HttpRequest 调用

http://otherdomain/api/Product/29

并将其JsonResult返回给调用 Javascript,然后您可以在其中使用它。因为您的 Javascript 和代理层在同一个域中,所以您不会面临源访问策略问题。

编辑:即使您在 localhost 上同时拥有它们但具有不同的端口,就浏览器而言,这也算作一个单独的域。从 localhost:41928 到 localhost:58128 的调用将受此安全策略的约束。如果你想解决这个问题,那么你需要将你的 MVC WebAPI 放在你的主项目中。要结合这两个项目,请创建一个新的 MVC WebAPI 项目 - 它带有服务路由以及常规 MVC 路由。


如果您想要一个真正“开放”的 WebAPI 服务,您可以按照本指南启用 CORS。在 IIS7 中,您可以将其添加到您的 web.config 文件中

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>
于 2012-11-29T19:54:03.420 回答
1

我最终做的和对我有用的,现在是使用 IIS Express 并将项目指向同一个虚拟目录

于 2012-12-07T14:42:03.423 回答