我们正在开发一个由Android Mobile App
和Web API
组成的项目。 Web API是Asp.net MVC Core。
我在CORS
上启用了Startup.cs
服务,因此移动应用API调用可以访问Cross Origin,我在响应标头中收到access-control-allow-origin →*
。
API返回到移动应用请求的结果的一部分是包含一些CSS文件的HTML(在移动视图中显示为广告)。在Mobile View中加载HTML时,CSS文件不会加载,因为它们似乎不是Cross Origin可访问的。
我有什么遗失的东西吗?我错过了任何配置步骤吗?
我的CORS配置如下:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddCors(options =>
{
options.AddPolicy("RTBCors",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
//.AllowCredentials()
);
});
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new Microsoft.AspNetCore.Mvc.Cors.Internal.CorsAuthorizationFilterFactory("RTBCors"));
});
services.AddMvc(...);
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
app.UseCors("RTBCors");
app.UseMvc(routes => .... );
...
}
答案 0 :(得分:0)
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = context =>
{
if (context.File.Name.ToLower().EndsWith(".json"))
{
var origin = context.Context.Request.Headers[CorsConstants.Origin];
var requestHeaders = context.Context.Request.Headers;
var isOptionsRequest = string.Equals(context.Context.Request.Method, CorsConstants.PreflightHttpMethod, StringComparison.OrdinalIgnoreCase);
var isPreflightRequest = isOptionsRequest && requestHeaders.ContainsKey(CorsConstants.AccessControlRequestMethod);
var corsResult = new CorsResult
{
IsPreflightRequest = isPreflightRequest,
IsOriginAllowed = IsOriginAllowed(Policy, origin),
};
if (!corsResult.IsOriginAllowed)
{ context.Context.Response.StatusCode = 204;
}
}