【问题标题】:How to enable cross-origin request in web api 2如何在 web api 2 中启用跨域请求
【发布时间】:2016-07-11 09:01:24
【问题描述】:

我知道这不是一个要解决的大问题,但我面临在 asp.net MVC web api 中使用 web api 的问题。

我收到以下错误: “XMLHttpRequest 无法加载 http://192.168.1.71:800/api/IzoGlass/ToolLocationData。请求的资源上不存在 'Access-Control-Allow-Origin' 标头。因此,不允许访问 Origin 'http://localhost:58469'”。

我已搜索并找到解决方案,但我的应用程序无法正常工作。

描述:-当我在我的应用程序中使用来自同一域的 web api 时,它工作正常。

但每当我从其他域使用 webapi 时,它都会抛出错误。上面给出的。

【问题讨论】:

    标签: .net asp.net-mvc asp.net-web-api2


    【解决方案1】:

    要启用 CORS 支持,请将 Microsoft.AspNet.WebApi.Cors NuGet 包添加到您的项目中。

    控制器

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

    config.EnableCors();代码添加到:

    public static void Register(HttpConfiguration config)
    {
        // New code
        config.EnableCors();
    }
    

    全局启用

    public static void Register(HttpConfiguration config)
    {
        var corsAttr = new EnableCorsAttribute("http://example.com", "*", "*");
        config.EnableCors(corsAttr);
    }
    

    参考:http://enable-cors.org/server_aspnet.html

    【讨论】:

      【解决方案2】:

      在 Web API 层启用跨域请求

      步骤 01: 添加 CORS NuGet 包。在 Visual Studio 中,从“工具”菜单中选择“库包管理器”,然后选择“包管理器控制台”。在包管理器控制台窗口中,键入以下命令:

      Install-Package Microsoft.AspNet.WebApi.Cors
      

      步骤 02: 打开文件 App_Start/WebApiConfig.cs。将以下代码添加到 WebApiConfig.Register 方法中。

      using System.Web.Http;
      namespace WebService
      {
          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 }
                  );
              }
          }
      }
      

      步骤 03。 接下来,将 [EnableCors] 属性添加到 Controller 类中

      using System.Net.Http;
      using System.Web.Http;
      using System.Web.Http.Cors;
      
      namespace WebService.Controllers
      {
          [EnableCors(origins: "*", headers: "*", methods: "*")]
          public class TestController : ApiController
          {
              // Controller methods not shown...
          }
      }
      

      【讨论】:

      • 或者在 HttpConfiguration 配置中; config.EnableCors();
      【解决方案3】:

      将此添加到您的 WebApiConfig

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

      【讨论】:

        【解决方案4】:

        由于以下政策,您应该将Access-Control-Allow-Origin: <origin> | * 添加到响应的标题中。

        出于安全原因,浏览器会限制从脚本中发起的跨域 HTTP 请求。例如,XMLHttpRequest 遵循同源策略。因此,使用 XMLHttpRequest 的 Web 应用程序只能向自己的域发出 HTTP 请求。为了改进 Web 应用程序,开发人员要求浏览器供应商允许 XMLHttpRequest 进行跨域请求。

        【讨论】:

          猜你喜欢
          • 2016-06-30
          • 1970-01-01
          • 1970-01-01
          • 2014-06-20
          • 2016-12-21
          • 2023-03-09
          • 2017-04-01
          • 1970-01-01
          • 2017-03-26
          相关资源
          最近更新 更多