相关疑难解决方法(0)

由于CORS,Azure网站上的HTTP OPTIONS请求失败

我最近将我们的服务器从Rackspace CloudSites(在Apache/Linux上运行)转移到了Windows Azure网站.自迁移以来,我们的REST API上的所有jQuery AJAX请求都因CORS而失败.

我们使用自定义标头,因此jQuery在运行实际API调用之前会发出Pre-flight HTTP OPTIONS请求.问题是OPTIONS请求似乎没有到达我的PHP代码,而是由其他一些我似乎无法控制的实体(显然是Web服务器)返回.

我已经使用以下标题几年了所以我很确定问题不在PHP代码中:

<?php
    $this->output->set_header("Access-Control-Allow-Origin: *");
    $this->output->set_header("Access-Control-Allow-Methods: GET,POST,DELETE,HEAD,PUT,OPTIONS");
    $this->output->set_header("Access-Control-Allow-Headers: X-Olaround-Debug-Mode, Authorization, Accept");
    $this->output->set_header("Access-Control-Expose-Headers: X-Olaround-Debug-Mode, X-Olaround-Request-Start-Timestamp, X-Olaround-Request-End-Timestamp, X-Olaround-Request-Time, X-Olaround-Request-Method, X-Olaround-Request-Result, X-Olaround-Request-Endpoint" );
?>
Run Code Online (Sandbox Code Playgroud)

我猜这个问题是特定于Azure网站的,因为代码似乎在我的开发机器(Windows 8/IIS 8.0)上运行良好.我是Azure的新手(以及一般的基于Windows的托管)所以我几乎不知道如何处理和调试此问题,因为Azure网站允许非常小的控制.

php jquery azure cors azure-web-sites

6
推荐指数
3
解决办法
2万
查看次数

执行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
查看次数

标头无法使用跨域传递ajax

我为我的网站使用了两个项目.一个用于Mvc项目和Api项目.我在web.config文件中添加了以下代码,该文件位于Api项目中,

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization
Run Code Online (Sandbox Code Playgroud)

Api项目中的动作方法如下,

[HttpPost]
[Route("api/ajaxapi/caselistmethod")]
public List<CaseValues> AjaxCaseListMethod()
{
            List<CaseValues> caseList = new List<CaseValues>();
            return caseList;
}
Run Code Online (Sandbox Code Playgroud)

和ajax调用如下,这是在Mvc项目中,

$.ajax({
            type: "POST",
            url: "http://localhost:55016/api/ajaxapi/caselistmethod",
            beforeSend: function (request) {
                request.setRequestHeader("Authorization", getCookie("Token"));
            },
            success: function (response) {
            }
});
Run Code Online (Sandbox Code Playgroud)

但是显示如下错误,

选项http:// localhost:55016/api/ajaxapi/caselistmethod 405(方法不允许)XMLHttpRequest无法加载http:// localhost:55016/api/ajaxapi/caselistmethod.预检的响应具有无效的HTTP状态代码405

但没有Header工作正常.我也需要传递标题.所以请提出任何建议.

谢谢...

javascript c# asp.net-mvc jquery cross-domain

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

Kubernetes 服务之间的内部 CORS 问题

1

我试图从我的前端部署/pod(在 NGINX 中运行的 Angular 7 应用程序)向我的后端服务(NET Core WEB API)发出一个 http 请求。

URL,如图所示,是http://k8s-demo-api:8080/api/data

//environment.prod.ts in Angular App

export const environment = {
  production: true,
  api_url: "http://k8s-demo-api:8080/api"
};
Run Code Online (Sandbox Code Playgroud)

我的 API 中启用了 CORS:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using K8SDockerCoreWebApi.Contexts;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

namespace K8SDockerCoreWebApi
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // …
Run Code Online (Sandbox Code Playgroud)

nginx kubernetes asp.net-core-webapi angular angular7

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