如何在web api 2

时间:2016-07-11 09:01:24

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

我知道这不是一个很难解决的问题,但我在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时,它正常工作。

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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...
    }
}

答案 2 :(得分:1)

将此添加到您的WebApiConfig

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

答案 3 :(得分:0)

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

  

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