跨域localhost:使用$ http angularjs请求拒绝端口请求到web api

时间:2017-01-10 12:01:40

标签: javascript angularjs ajax asp.net-web-api asp.net-web-api2

由ASP.NET服务器托管的

angular js。 打电话给网络API。 什么时候POST web api没有参数然后工作。但是当传递参数到POST web api时,它会给出以下错误。 错误: XMLHttpRequest无法加载http://localhost:60117/api/Parts。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原始http://localhost:64658访问。

注意:已经启用了cors nuget。 [EnableCors("*", "*", "*")] 低于webapiconfig.cs

中的代码
var cors = new System.Web.Http.Cors.EnableCorsAttribute("*", "*", "*");
        config.EnableCors(cors);

以下是我的请求标题:

OPTIONS /api/Parts HTTP/1.1
Host: localhost:60117
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:64658
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36    (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Access-Control-Request-Headers: content-type
Accept: */*
Referer: http://localhost:64658/app/views/Index.html
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8

然后在web.config中执行下面的代码,然后给出mulitple accept动词错误。

<httpProtocol>
    <customHeaders>
        <clear/>
        <add name="Access-Control-Expose-Headers " value="WWW-Authenticate"/>
        <add name="Access-Control-Allow-Origin" value="*"/>
        <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, PATCH, DELETE"/>
        <add name="Access-Control-Allow-Headers" value="accept, authorization, Content-Type"/>
        <remove name="X-Powered-By"/>
    </customHeaders>
</httpProtocol>

更新

Now getting below request response message:

The requested resource does not support http method 'POST'.

AJAX电话:

$http({
        method: "POST",                       
        url: config.APIURL + 'Parts',
        data: {'final':'final'}                       
});

请在这里帮助我。坚持这个问题。

3 个答案:

答案 0 :(得分:0)

端口差异被视为跨域(xdomain)请求,因此某些浏览器会发送预检OPTIONS请求。

您需要设置服务器以接受这些请求并返回200 OK 按照以下网址

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

答案 1 :(得分:0)

如果您的尝试没有成功,可以尝试一下。    在WebApi的Globax.asax中,使用以下方法

protected void Application_BeginRequest()
        {
            if (Context.Request.HttpMethod == "OPTIONS")
            {
                Context.Response.AddHeader("Access-Control-Allow-Origin", Context.Request.Headers["Origin"]);
                Context.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
                Context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");                    
                Context.Response.End();
            }
    }

并在您的WebApi配置中调用以下方法来启用Cors

  config.EnableCors();

并且在您的控制器中具有类似于

的属性
[EnableCors(origins: "*", headers: "*", methods: "*")]

希望这会有所帮助。 您还可以参考此网站https://msdn.microsoft.com/en-us/magazine/dn532203.aspx了解更多详情。 感谢

答案 2 :(得分:-1)

您需要在服务器端添加CorsMessageHandler类以允许HTTP请求。