【发布时间】:2014-12-02 08:31:49
【问题描述】:
我最近在我的 Web API 控制器中实现了 cors。我正在从 domain2 上的客户端调用位于 domain1 上的 web api。
对于来源,我指定了一个虚假的网址。据我了解,仅接受来自此网址的呼叫。这是正确的吗?
所以只有来自
http://notgoingtowork.com
将能够调用控制器并返回数据
这是我的控制器(域 1)
public class TestController : ApiController
{
[EnableCors(origins: "http://notgoingtowork.com", headers: "*", methods: "*")]
public int Get()
{
return 1
}
}
然后在我的另一个域上,ajax 调用 (domain2)
$.ajax({
url: "http://domain1/api/Test/Get",
method: "GET",
headers: { "accept": "application/json;odata=verbose" },
success: function (data){alert("it worked");},
error: function (error) { alert("Did not work"); }
})
但是,请求仍然成功并且正在返回数据。由于客户端不在'http://notgoingtowork.com'上,它如何能够成功地做到这一点?我错过了什么?
我在 IE11 上执行此操作。这在 chrome 上运行良好。
编辑: 这是 WebApiConfig.cs 文件 这是相当通用的。我刚刚添加了 Cors 部分
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.EnableCors();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
【问题讨论】:
-
您是否也验证了
data的值?不仅仅是alert() -
是的。所有数据都会返回
-
您的
Startup.cs中是否有任何启用cors 的内容? -
进行 Ajax 调用后,您的 IE 11 控制台中是否有任何内容?另外,您的客户实际上是在不同的域上吗?
-
我添加了其中的 web api 配置部分。 IE 控制台中没有显示任何内容。除了标准的 200 OK 结果
标签: javascript c# asp.net-web-api cross-domain cors