我有一个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: "*")]
我可以寻求帮助吗?
答案 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字符串的方法。