No' Access-Control-Allow-Origin'标头出现在请求的资源上。调用WebApi时出错

时间:2017-03-24 06:50:34

标签: c# asp.net-web-api asp.net-mvc-5

从我的其他项目调用WebApi时,我收到此错误。

XMLHttpRequest cannot load http://localhost:64678/api/Employees/RetriveAllEmployees. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:49169' is therefore not allowed access. The response had HTTP status code 500.

我知道在WebApi项目中需要启用CORS。我已经在我的WebApi项目中添加了波纹管代码。

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

但是当我从其他项目调用WebApi时,我仍然遇到此错误。

我将webapi称为贝娄。

        $("#getEmployees").on("click", function () {
            $.ajax({
                type: 'GET',
                url: 'http://localhost:64678/api/Employees/RetriveAllEmployees',
                success: function (data) {
                    debugger;
                },
                error: function (error) {
                    debugger;
                }
            });
        });

无法理解什么是问题。

3 个答案:

答案 0 :(得分:0)

您是否尝试添加到您的webconfig中?

 <system.webServer>
   <httpProtocol>
     <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>

答案 1 :(得分:0)

你也可以尝试一下。

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
    <add name="Access-Control-Allow-Credentials" value="true" />
  </customHeaders>

</httpProtocol>

答案 2 :(得分:0)

我尝试了所有可以在网上找到的内容,包括此答案中给出的方法。在几乎一整天都试图解决问题之后,我发现了一种非常适合我的解决方案。

在文件夹App_Start中的WebApiConfig文件中,注释所有代码行并添加以下代码:

    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        config.EnableCors();
        var enableCorsAttribute = new EnableCorsAttribute("*",
                                           "Origin, Content-Type, Accept",
                                           "GET, PUT, POST, DELETE, OPTIONS");
        config.EnableCors(enableCorsAttribute);
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            //routeTemplate: "api/{controller}/{id}",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.Formatters.Add(new BrowserJsonFormatter());
    }

    public class BrowserJsonFormatter : JsonMediaTypeFormatter
    {
        public BrowserJsonFormatter()
        {
            this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
            this.SerializerSettings.Formatting = Formatting.Indented;
        }

        public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
        {
            base.SetDefaultContentHeaders(type, headers, mediaType);
            headers.ContentType = new MediaTypeHeaderValue("application/json");
        }
    }