尽管启用了cors,Asp.NET WebAPI仍然无法访问

时间:2019-08-20 11:54:47

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

我有一个WebAPI-.NET Framework 4.6.2 我通过招摇访问webapi时遇到以下错误:

  

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

我的代码中已经有CORS 我想知道会发生什么

WebAPIConfig.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {               
       config.EnableCors();
    }
}

GlobalAsax.cs

protected void Application_Start()
{
  RouteTable.Routes.MapOwinPath("swagger", app =>
  {
    app.UseSwaggerUi(typeof(WebApiApplication).Assembly, new SwaggerUiSettings
    {
      MiddlewareBasePath = "/swagger",
      ShowRequestHeaders = true,
      DefaultUrlTemplate = "{version}/{controller}/{action}/{id}",
      AddMissingPathParameters = true,
      Version = "v1"
    });
  });
  IModule module = TfmsModule.GetModule(typeof(MyBCModule), "My");
  module.StartModule();
  Tracer.Info("MyAPI.Application_Start: MyBCModule(\"MyAPI\").StartModule()");
  GlobalConfiguration.Configure(WebApiConfig.Register);
}

我在控制器的开头添加了以下行

[EnableCors(origins: "*", headers: "*", methods: "*")]

我可以寻求帮助吗?

1 个答案:

答案 0 :(得分:0)

我假设您正在使用Swashbuckle。如果不是这种情况,那么我将删除该帖子!

错误:

  

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

如果根URL与传入请求的URL不匹配,则在请求Swagger UI时抛出

。根URL用于通过UI页面获取Swagger文档,因此,如果根URL和Swagger UI请求的URL不同,则会出现CORS错误。根据Swashbuckle的注释:

  

默认情况下,服务根网址是从用于   访问文档。但是,在某些情况下(例如代理和   负载平衡的环境)。您   可以通过提供您自己的代码来确定根目录来解决此问题   网址。

因此,在某些情况下,您可能会通过代理进入,并且根URL设置不正确。您可以通过查看大页页面源代码并查找以下行来查看正在解析的根URL:

window.swashbuckleConfig = {
    rootUrl: '<THE_RESOLVED_ROOT_URL>', ...

如果这与您的请求URL不同,则会抛出您所看到的错误。要解决此问题,请在您的请求中使用根URL或将根URL设置为您在SwaggerConfig.cs文件中请求的根URL:

c.RootUrl(req => GetRootUrlFromAppConfig());

...其中GetRootUrlFromAppConfig是返回根URL字符串的方法。