来自Web Form的Web-API cal – AJax。 没有’Access-Control-Allow-Origin’标题

我试图使用Web API与Web窗体应用程序通过Ajax调用获取数据。

因此创建了一个Web API项目并将其部署到本地IIS。 它回应了这些要求。

在此处输入图像描述

然后在webForm(Default.aspx)中进行Ajax调用以获取数据。

$(document).ready(function () { var url = 'http://localhost:8080/api/Values'; $.ajax({ url: url, type: 'POST', crossdomain: 'true', contentType: "application/json; charset=utf-8;", type: 'GET', success: function (result) { var r = JSON.stringify(result); alert("From Web-API " + r); } }); }); 

但这是跟随错误

“XMLHttpRequest无法加载http:// localhost:8080 / api / Values 。请求的资源上没有’Access-Control-Allow-Origin’标头。因此不允许来源’ http:// localhost:61605 ‘。 “

在此处输入图像描述

我在这里缺少哪个标题?

或者只是从web api站点添加web.config的正确标头:

            

由于您的Web API和WebForms项目托管在不同的端口上,因此它被视为跨域(CORS)请求。 查看本文,其中介绍了如何装饰Web API控制器以允许CORS访问。

http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

大多数事情都不能解决问题。

这根本没有用

 crossdomain: 'true', 

不要触摸你的web.config,在那里添加代码!

如果这与VERBS的其他部分一起在web.config中,则最终会出现多个响应头的问题

    

所以相反,使用Nuget和Add in Asp.net web api Cors

然后在webapiconfig.cs中添加这些行

 var cors = new EnableCorsAttribute("*", "*", "*"); config.EnableCors(cors); 

像冠军一样工作。

我正面临同样的问题,就像你的一样。 我在我的代码库中做了一些事情并开始工作。

我已将以下Nuget包安装到My Web Api项目中。 您可以通过Package Manager Console或Nuget Package Manager进行安装。

 Install-Package Microsoft.AspNet.WebApi.Cors 

我将New Code添加到我的WebApiConfig.cs

 using System.Web.Http; using System.Web.Http.Cors; namespace SampleWebApi { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // New code config.EnableCors(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } } 

最后,这是指定的重要部分:

这是我的Sample Value Controller API。

 using System.Collections.Generic; using System.Web.Http; using System.Web.Http.Cors; namespace SampleWebApi.Controllers { // You have to Add this One line in your API Controller [EnableCors(origins: "*", headers: "*", methods: "*")] // Allow CORS for all origins. (Caution!) public class ValuesController : ApiController { // GET api/values public IEnumerable Get() { return new string[] { "value1", "value2" }; } // GET api/values/5 public string Get(int id) { return "value"; } } } 

以上解决方案经过测试,效果很好。

假设您知道自己的原点,可以在Controller类声明之上指定类似下面的内容。

 [EnableCors(origins: "http://www.contoso.com,http://www.example.com", headers: "*", methods: "*")] 

希望这可以帮助。, :)