当前在一个网页上运行,该网页调用了一个REST API,该API击中了我的SQL Server。在VS2013中的本地主机上工作,但是当发布并添加到服务器时,我开始遇到CORS问题。我已将以下代码添加到我的Web服务的web.config文件中,仍然没有运气:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
启用Cors后,我的webapiconfig.cs如下所示:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.EnableCors();
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
json.SerializerSettings.ContractResolver = new
CamelCasePropertyNamesContractResolver();
config.Formatters.Remove(config.Formatters.XmlFormatter);
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
}
}
我执行该调用的控制器文件也具有正确的CORS标头:
{
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class RefurbItemsController : ApiController
{
// GET: api/RefurbItems
[Route("api/RefurbItems")]
public HttpResponseMessage Get()
{
var items = RefurbItems.GetAllItems();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, items);
return response;
}
// GET: api/RefurbItems/5
public string Get(int id)
{
return "value";
}
// POST: api/RefurbItems
public void Post([FromBody]string value)
{
}
// PUT: api/RefurbItems/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE: api/RefurbItems/5
public void Delete(int id)
{
}
}
它可以在我的开发机和服务器本身在本地正常运行,但是当我尝试将其部署到Web并查看页面时,出现以下错误消息:
在Access-Control-Allow-Origin标头中找不到源。
XMLHttpRequest:网络错误0x80070005,访问被拒绝。
如果有人可以提供一些想法或任何帮助,我可以尝试我是asp.net的新手
最佳答案
原来的问题是,我的EnableCors位于类和控制器的两个位置:
WebApiConfig.cs
config.EnableCors();
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
json.SerializerSettings.ContractResolver = new
CamelCasePropertyNamesContractResolver();
config.Formatters.Remove(config.Formatters.XmlFormatter);
控制者
[EnableCors(origins: "*", headers: "*", methods: "*")]
我要做的就是删除位于WebApiConfig.cs中的config.EnableCors(),一切开始正常运行。