0

我正在编写我的第一个 WebAPI 服务,从纯 HTML/javascript 应用程序中调用。我首先启动了 Visual Studio,然后在 Safari 中运行我的应用程序(它拒绝在 Chrome 中运行,并且无论我做什么都会给出这个确切的错误,但到目前为止在 Safari 中一直很好)。

根据我对此的其他 SO 阅读,我添加了一个标头,即 Access-Control-Allow-Origin,其值为 *。

当我在我的网络应用程序中按下按钮时,它会进行 AJAX 调用,我可以单步调试调试器以查看它是否可以正常调用我的服务。返回时总是返回一个对象,在 Safari 中控制台的错误是“XMLHttpRequest cannot load (myurl). Origin file:// is not allowed by Access-Control-Allow-Origin”。

任何有关如何让 Safari 接受返回值的建议将不胜感激。正如我所说,它返回一个类,我希望 WebAPI 将其转换为 JSON 字符串以返回给浏览器。我不知道我在这里做错了什么,或者Safari中是否有问题。我应该提一下,虽然我认为这很明显,但我使用的是 MVC4,因此我在 Windows 上使用 Safari,而不是 Mac。

谢谢

4

3 回答 3

0

您目前如何添加标题?问题是没有让 safari 接受返回值,您的 WebAPI 拒绝了请求。

这是一篇关于如何在 Web API v1 (MVC4) 中实现 CORS 的文章。http://goo.gl/BZkrlf

如果您可以使用 MVC5/WebAPI v2,则有一种更简单的方法可以通过 NuGet 包启用 CORS(请参阅此操作方法http://goo.gl/60YkgX

于 2013-11-07T03:15:54.577 回答
0

这是协议不匹配的问题。如果请求来自 FILE 协议,则不能向 HTTP 协议发送跨域请求。尝试使用本地网络服务器查看页面,以便您可以使用 HTTP 在浏览器中预览页面。我遇到过同样的问题 - 这是浏览器方面的问题,而不是您的服务问题。

于 2013-11-07T04:20:54.597 回答
0

您可以从 nuget 使用 Microsoft.AspNet.Cors 并添加

var attr = new EnableCorsAttribute(" ", " ", "GET"); config.EnableCors(attr);

到 WebApiConfig.cs

于 2016-11-21T06:31:28.760 回答