【问题标题】:(CORS error) Can't send POST request (OPTIONS gets denied) with Angular to ASP.net REST services(CORS 错误)无法使用 Angular 向 ASP.net REST 服务发送 POST 请求(OPTIONS 被拒绝)
【发布时间】:2015-09-15 13:24:31
【问题描述】:

所以,当我尝试发送 POST 请求时,它没有成功。 Chrome 提示我这个错误:

OPTIONS http://localhost:49475/api/Kpi/new (anonymous function) @ angular.js:10661sendReq @ angular.js:10480serverRequest @ angular.js:10187processQueue @ angular.js:14634(anonymous function) @ angular.js:14650Scope.$eval @ angular.js:15878Scope.$digest @ angular.js:15689Scope.$apply @ angular.js:15986(anonymous function) @ angular.js:23376n.event.dispatch @ jquery-2.1.4.min.js:3r.handle @ jquery-2.1.4.min.js:3

Index.html:1 XMLHttpRequest cannot load http://localhost:49475/api/MYLINK. Response for preflight has invalid HTTP status code 405

我非常怀疑我的请求是否存在问题,但它看起来像这样:

return $http.post(apiAddress + 'mylink', dataObj)
            .then(function (response) {
                console.log("succeeded");
                return response.status;
            }, function (response) {
                console.log("failed");
                return response.status;
            });

我已在我的 API 部分(服务器一)上安装了 CORS,并在 WebApiConfig 中启用了它:

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

我还编辑了我的 Web.config 文件并启用了所有访问控制变量:

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

我的客户端在 localhost:57810 上运行,而服务器端在 localhost:49475 上。我一直在寻找这个工作近 6 个小时。我已经尝试了所有可以在网上找到的可能的 sn-p 和“解决方案”,但都没有成功。如果是这样,我就不会发布这个问题了......

感谢我得到的任何答案...

编辑:Post 方法按预期工作,我已经用 Postman 对其进行了测试。现在,向上述 url (api/mylink) 发送 OPTIONS 请求不起作用。

返回:

{"Message":"The requested resource does not support http method 'OPTIONS'."}

【问题讨论】:

  • 您是否尝试将[EnableCors(origins: "*", headers: "*", methods: "*")] 放在您的 ApiController 上?
  • 我刚试过,很遗憾它不起作用。
  • 请贴上action方法的签名

标签: asp.net angularjs rest http http-headers


【解决方案1】:

由于某种原因,WebApiConfig 和 Web.config 答案中的配置混淆了,不能一起工作。我会花更多时间来了解为什么会出现这个问题,但与此同时,可行的解决方案是:

  1. 擦除 Web.config 中 &lt;httpprotocol&gt; 标签之间的所有数据(我的帖子中的第 4 个 sn-p)
  2. 在 WebApiConfig 中,在 EnableCorsAttribute 初始化中,发送'*' 作为第一个参数不起作用,但明确键入:'http://localhost:57810' 确实有效!这是我原帖中的第二个 sn-p。

我不知道为什么第二个会阻碍我的服务器。也许这是某种错误,因为文档清楚地表明'*' 是一个通配符,或者可能是其他一些配置阻止它工作。

如果有人可以扩展答案,请成为我的客人。

【讨论】:

    【解决方案2】:

    好的。我可能有一个线索。

    我猜这是路由的问题:web api 找不到动作,也找不到选项处理程序。

    Asp.Net webapi中默认的路由方式是根据请求方式决定controller中的action。 我倾向于不喜欢这种方法并从

    更改 WebApiConfig 文件
    routeTemplate: "api/{controller}/{id}"
    

    routeTemplate: "api/{controller}/{action}/{id}"
    

    此外,您可以将[RoutePrefix("api/AAA")] 放在控制器上,将[Route("BBB")] 放在您的操作上。此外,将[HttpPost] 放在您的操作中,这样您就已经明确设置了所有内容。 现在你的网址变成了/api/AAA/BBB 请试一试,在您的服务器域(端口)中测试它,并确保您的路由按预期工作。然后继续在客户端域(端口)中进行测试。

    请告诉我它是否会起作用

    【讨论】:

    • 由于网络问题,我无法更早地访问 SO。我很欣赏你的回答,但路线或明确设置任何东西都不起作用。我将用有效的解决方案回答我自己的问题。感谢您的帮助,无论如何,非常感谢。
    猜你喜欢
    • 2017-01-14
    • 2013-11-20
    • 2021-07-02
    • 2020-01-28
    • 2016-07-03
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    相关资源
    最近更新 更多