Asp.net 当我的ajax调用可以';你不能做吗?

Asp.net 当我的ajax调用可以';你不能做吗?,asp.net,ajax,cors,soapui,Asp.net,Ajax,Cors,Soapui,这可能是一个愚蠢的问题,但下面是我的简单webapi 2方法 public class ProductsController : ApiController { Product[] products = new Product[] { new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 }, new

这可能是一个愚蠢的问题,但下面是我的简单webapi 2方法

public class ProductsController : ApiController
    {
        Product[] products = new Product[] 
        { 
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 }, 
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M }, 
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M } 
        };

        public IEnumerable<Product> GetAllProducts()
        {
            return products;
        }
我得到了CORS的错误

SOAPUI在使用http时,如何在这里不出错


谢谢

将该索引文件放到某个服务器位置,然后使用服务器url浏览页面,例如,
http://localhost/virtual_dir/index.html
,否则它会说它的
文件://
域与
http://localhost:port
。如果您将此页面部署到其他域并开始使用,您可能会面临
CORS问题

我已经看到您正在使用
webapi
,如果您将JS放在域(“example1.com”)中,您可能会面临CORS问题,我的意思是
example1.com
提供的文件将对webapi进行ajax调用,并且webapi可能托管在
example2.com
中。这将引发CORS问题。浏览器将ajax调用限制到其他域,除非该域允许您调用。要实现这一点,您可以点击此链接-(不要点击标题)


我在这里回答了相同的场景。

我刚刚在开发一个网页时遇到了相同的情况,该网页需要向一个由未启用CORS的远程服务器提供服务的web服务发送SOAP请求。这是在一个测试环境中;在生产中,web页面和web服务是从同一域和端口提供的

SOAPUI在使用http时,如何在这里不出错

是的,SoapUI和web浏览器都使用HTTP。但是SoapUI不是web浏览器,并且不共享相同的限制

一位同事帮我解决了这个问题

  • 如果尚未安装,请安装

  • 在任何地方安装CORS(
    npm在任何地方安装CORS

  • 运行CORS Anywhere(
    节点CORS Anywhere.js

  • 不要使用原始的未启用CORS的web服务URL,而是使用CORS Anywhere(“在…上运行CORS Anywhere”)生成的消息中的域和端口,并将原始web服务URL作为路径组件

  • 您可以在环境变量中指定CORS Anywhere端口(或在本地副本
    CORS Anywhere.js
    中编辑默认值)

    在我的例子中,生产web服务URL在web页面中硬编码为相对路径。但我添加了从片段标识符(“哈希字符串”)中的参数读取URL的代码,覆盖了默认的web服务URL

    例如:

    其中:

    • http://localhost:8081/mywebpage.html
      是我的网页(我使用的是
      http://
      ,而不是
      文件://

    • http://localhost:8089
      是CORS Anywhere代理

    • remote.domain.com:8085/servicename
      (您可以删除前面的
      http://
      )是远程的、非CORS支持的web服务


      • 我可以为您指出两种解决方法:

      • 禁用您的浏览器CORS:由于CORS的实施是由浏览器完成的,您只需在自己的浏览器中进行开发时禁用即可。如果您使用Chrome,您必须设置一个参数,否则我可能会猜测您正在使用Firefox的下面的图像,为此,您有一个扩展来执行此操作:
      • 允许在SOAP UI中使用CORS:这可能比上述解决方案需要更多的努力,但它非常适合您需要与多个队友共享或只是将解决方案附加到模拟服务时使用。要做到这一点,您必须为资源路径的根添加一个响应,该响应对状态为204(或200)的CORS所需的选项和头进行响应。 之后,在MockService中,您只需要添加一个脚本,以便在通过的所有调用中获取这些相同的头
      • 下面是一篇逐步解决这个问题的文章:

              <script type="text/javascript">
                    function GetProducts() {
        
        
                        $.ajax({
                            url: "http://localhost:3145/Products",
                            dataType: "json",
                            success: function (data) {
                                for (var i = 0; i < data.length; i++)
                                    $('#myDiv').append(data[i].Category).append("<br/>");
                            },
                            error: function (xhr, status) {
                                alert(xhr);
                            }
                        });
                    }
        
                </script>
            </head>
        <body onload="GetProducts()">
            <h1>My App</h1>
            <div id="myDiv"></div>