相关疑难解决方法(0)

在IIS7上启用跨源资源共享

我最近遇到了将Javascript请求发布到另一个域的问题.默认情况下,不允许将XHR发布到其他域.

按照http://enable-cors.org/的说明,我在其他域上启用了此功能.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
  <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="Content-Type" />
    </customHeaders>
  </httpProtocol>
 </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在一切正常,但是在发回工作200响应之前仍然会返回405响应.

Request URL:http://testapi.nottherealsite.com/api/Reporting/RunReport
Request Method:OPTIONS
Status Code:405 Method Not Allowed
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Access-Control-Request-Headers:origin, content-type, accept
Access-Control-Request-Method:POST
Connection:keep-alive
Host:testapi.nottherealsite.com
Origin:http://test.nottherealsite.com
Referer:http://test.nottherealsite.com/Reporting
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
Response Headersview source
Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Origin:*
Allow:POST
Cache-Control:private
Content-Length:1565
Content-Type:text/html; charset=utf-8
Date:Tue, 18 Sep 2012 14:26:06 GMT …
Run Code Online (Sandbox Code Playgroud)

javascript iis-7 xmlhttprequest cors

84
推荐指数
6
解决办法
18万
查看次数

执行PUT/POST时没有HTTP资源错误[CORS问题 - AngularJS + Web API 2]

在SO中有这么多问题与此类似,但没有一个问题解决了我的问题.

我已经托管了一个angularjs网站http://localhost:49595,我正在调用一个Web Api 2.1服务http://localhost:63019.我在web.config中的web api服务器上启用了CORS.GET/buildings/1和GET/buildings /?$ top = 10&$ skip = 1的请求工作正常.

说到PUT,我收到以下错误:{"Message":"找不到与请求URI匹配的HTTP资源http://localhost:63019/buildings/1105'.","MessageDetail":"在控制器'Building'上找不到匹配的操作要求." }

chrome中出错

我可以看到浏览器将OPTIONS请求发送到服务器,但是要更新的实际数据不在请求中(在fiddler中检查.不确定OPTIONS查询是否正常).

在此输入图像描述

我在web api上启用了跟踪,我看到了以下日志.https://gist.github.com/rnarayana/8905229 OPTIONS请求(第69行)说它需要进行PUT.在第77行附近,看起来它选择了正确的动作.然后控制器被处理掉.此外,控制器正在实例化两次.

我怎样才能知道发生了什么?

在AngularJS中调用代码:尝试:

$http.put('http://localhost:63019/buildings/' + building.BuildingId, building)
.then(onSuccess, onError);
Run Code Online (Sandbox Code Playgroud)

$http({
    url: urlBase + '/' + building.BuildingId,
    dataType: 'json',
    method: 'PUT',
    data: building,
    headers: {"Content-Type": "application/json"}
}).then(onSuccess, onError);
Run Code Online (Sandbox Code Playgroud)

这些在我的控制器中:

[HttpGet]
[Route("buildings/")]
public IHttpActionResult GetAll(ODataQueryOptions<BuildingViewModel> queryOptions)
{
}

[HttpGet]
[Route("buildings/{id}")]
public IHttpActionResult Get(long id)
{
}

[Route("buildings/")]
[HttpPost]
public IHttpActionResult Post(BuildingEditViewModel buildingEditViewModel)
{
}

[HttpPut]
[Route("buildings/{id}")]
public …
Run Code Online (Sandbox Code Playgroud)

put cors asp.net-web-api angularjs

5
推荐指数
1
解决办法
7667
查看次数