无法从服务器读取。它可能没有适当的访问控制原点设置

时间:2017-09-05 18:18:14

标签: asp.net-web-api swagger swagger-ui

我收到以下错误:无法从服务器读取。当代码部署到服务器时,它可能没有适当的访问控制源设置。。 我做了很多研究 在web.config中添加了以下代码

    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
      </customHeaders>
    </httpProtocol>

或在启动项目中

public static void Configuration(IAppBuilder app)
        {
            app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
        }

或int webapi.config - &gt;注册

config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

可以提供一些帮助吗?有没有人有同样的问题

enter image description here

3 个答案:

答案 0 :(得分:1)

这是一个古老的问题,但我遇到了同样的问题,没有找到永久性的解决方法,但偶然发现了解决方法。所以在这里分享。

Swagger URL为http://localhost/blah/swagger/ui/index#/

但是草率文档的URL是https://localhost/blah/swagger/docs/v1

将文档的URL从 https 更改为 http 可行。

如果有人知道即使两个URL都具有相同的协议(https),在以上问题的情况下为何也无法解决问题,

答案 1 :(得分:0)

当尝试使用插件alt3/cakephp-swagger来记录Cakephp api时,我遇到了相同的问题 在玩了一段时间后,我意识到这个奇怪的CORS错误的原因是由于生成了无效的json,因为没有文件具有生成swagger所需的有效json所需的逻辑。我通过在随机的php文件中添加一些swagger-php逻辑来找到解决方案。

答案 2 :(得分:0)

我只是面对这个问题,这是我的解决方案:

.EnableSwagger(c =>
                {
                    // By default, the service root url is inferred from the request used to access the docs.
                    // However, there may be situations (e.g. proxy and load-balanced environments) where this does not
                    // resolve correctly. You can workaround this by providing your own code to determine the root URL.
                    //
                    c.RootUrl(req =>
                    {
                        var url = req.RequestUri.Scheme ;
                       
    #if  !DEBUG 
                        url += "s";
    #endif
                        url += "://" + req.RequestUri.Authority + System.Web.VirtualPathUtility.ToAbsolute("~");
                        return url;
                    });
             });

我允许在调试模式下不使用 https 方案,并在您在服务器上发布应用程序时使用它。这为我解决了问题。