Javascript 角度/C#CORS问题

Javascript 角度/C#CORS问题,javascript,c#,angularjs,cors,Javascript,C#,Angularjs,Cors,我在localhost:8080/上托管了客户端,在localhost:44302上托管了服务器/ 我试图链接到我的后端,但我得到了CORS问题。下面是我的http请求 $http.post(url, data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Access-Control-Allow-Origin': '*

我在localhost:8080/上托管了客户端,在localhost:44302上托管了服务器/

我试图链接到我的后端,但我得到了CORS问题。下面是我的http请求

$http.post(url, data, {
    headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                    'Access-Control-Allow-Origin': '*',
                    'Access-Control-Allow-Methods': 'POST, OPTIONS'
             }
}).success(function (response) {
  // rest of the code
}).error(function (err, status) {
  // rest of the code
});
在用C#编写的服务器端,我对响应进行了以下设置

 Response.ContentType = "application/json";
 Response.AddHeader("Access-Control-Allow-Origin", "*");
 Response.AddHeader("Access-Control-Allow-Methods", "POST, OPTIONS");
即使在设置这些之后,我也会得到以下错误

无法加载XMLHttpRequest。 请求的服务器上不存在“Access Control Allow Origin”标头 资源。因此,不允许使用源“” 通道响应的HTTP状态代码为400


我遗漏了什么?

您不需要从AngularJS发送任何额外的标题。将自动为您发出飞行前请求

要在Web API中启用所有跨源请求,可以执行以下操作:

  • 安装NuGet软件包Microsoft.AspNet.WebApi.Cors
  • 将以下代码添加到WebApiConfig.cs:

        var corsAttr = new EnableCorsAttribute("*", "*", "*");
        config.EnableCors(corsAttr);
    
  • 充分理解CORS值得花几分钟的时间。我建议在这里阅读一篇深入的教程:


    在应用程序级服务器端执行此操作 不需要在客户端应用程序中进行任何更改

    public static void Register(HttpConfiguration config)
        {
            // New code
            config.EnableCors();
    
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    
    步骤1:安装软件包Microsoft.AspNet.WebApi.Cors

    步骤2:从HttpConfiguration对象可以启用cors-适用于整个应用程序

    public static void Register(HttpConfiguration config)
        {
            // New code
            config.EnableCors();
    
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    
    备选方案

    步骤3:转到控制器添加以下属性-仅适用于TestController

    // Allow CORS for all origins. (Caution!)
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    
    示例

    [EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")]
    public class TestController : ApiController
    {
        // Controller methods not shown...
    }
    

    你在后台使用什么?ASP.NET Web API?你把修改响应的代码放在哪里了?是的,我使用ASP.NET MVC,我把代码放在从那里发回响应的控制器中虽然我不需要它来解决我的解决方案,但我会接受它,因为它为其他人提供了一个明确的解决方案。在我的例子中,我在某个地方使用了一个合适的IP,而不是本地主机,由于Microsoft的一些奇怪的IP问题,我看不到它。