如何在web api 2中启用跨源请求

问题描述 投票:3回答:4

我知道这不是一个很难解决的问题,但是我在asp.net MVC web api中使用web api时遇到了问题。

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

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

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

但每当我从其他域使用web api时它的投掷错误。如上所述。

.net asp.net-mvc asp.net-web-api2
4个回答
6
投票

要启用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...
    }
}

1
投票

将其添加到WebApiConfig

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

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.