asp.net - AngularJS $http.POST 方法 405 错误

标签 asp.net angularjs asp.net-web-api cors

在 $http.post 方法中,我遇到了 405 问题。我们对 POST 和 GET 方法使用单一服务(REST)。

如果 url 具有 localhost 它正在工作。 urlAddScenario 是 localhost/Service.svc/api/scenarios/add。如果我使用机器名称而不是 locahost,则它不起作用。机器名称/Service.svc/api/scenarios/add

我的JS代码是

 scenarioExecutionFactory.addScenario = function (scenarioId) {
        return $http.post(urlAddScenario, scenarioId)               
    };

另一个JS:
 var runScenarioId = { "ScenarioId": 10 }
                   scenarioExecutionFactory.addScenario(runScenarioId )
                         .success(function (data) {
                             $scope.getScenarioRecentRuns($scope.CurrentScenario);
                         });

WCF服务:
  [OperationContract]
        [WebInvoke(UriTemplate = "api/scenarios/add",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            Method = "POST")]
        Request AddScenario(ScenarioRequestParams requestParams);

配置:
   <system.webServer>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Credentials" value="true" />
    <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,OPTIONS" />
    <add name="Access-Control-Allow-Headers" value="Origin,Content-Type,Accept,Authorization,X-Ellucian-Media-Type" />
  </customHeaders>

</httpProtocol>

我在标题中看到 OPTIONS 而不是 POST。

标题:
**OPTIONS** http://ddd/HelloService/HelloService.svc/PostData HTTP/1.1
Accept: */*
Origin: http://localhost:31284
Access-Control-Request-Method: POST
Access-Control-Request-Headers: accept, content-type
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko
Host: vijayakatta
Content-Length: 0
DNT: 1
Connection: Keep-Alive
Pragma: no-cache

错误:

IE:SCRIPT7002:XMLHttpRequest:网络错误 0x80070005,访问被拒绝。

Chrome:XMLHttpRequest 无法加载 htp//machinename/services.svc/api/scenarios/add。无效的 HTTP 状态码 405

响应 header :不允许使用 HTTP/1.1 405 方法

最佳答案

为了启用CORS通过 web.config您需要正确指定这 3 个自定义 header

<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" />
  </customHeaders>
</httpProtocol>

如果您打算支持 PUTDELETE你还需要处理的动词 预检 查看。
您可以阅读更多关于 CORS 的信息并在此答案中进行飞行前检查:https://stackoverflow.com/a/27374066/4304188

关于asp.net - AngularJS $http.POST 方法 405 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27387467/

相关文章:

javascript - 如何向 asp c# webMethod 发送参数?使用 Ajax Jquery

javascript - Angularjs 将变量传递给具有继承(非隔离)范围的指令

javascript - Jasmine 测试 AngularJS $on

javascript - "Stop running this script"确认框 - 如何获取有关脚本的更多详细信息?

javascript - jQuery 和 ASP.NET : Execute site code after master page has finished initialization

c# - web服务中文件下载多线程并发的问题

c# - 建立博客数据模型的最佳实践

c# - ASP MVC 路由中的新手 - 404 错误

asp.net-web-api - OData SingleResult 在 System.Web.Http 中不明确

c# - 从 MVC 4 Web Api 返回匿名类型失败并出现序列化错误