gpt4 book ai didi

asp.net - CORS 适用于对 API 的直接请求,但不适用于静态文件(如 css)

转载 作者:行者123 更新时间:2023-12-04 11:37:19 25 4
gpt4 key购买 nike

我们正在开发一个由 Android Mobile App 组成的项目。连同 Web API . Web API 是 Asp.net MVC Core。

我已启用 CORS我的服务 Startup.cs ,因此移动应用程序 API 调用可跨源访问,我收到 access-control-allow-origin →*在响应头中。

API 返回给移动应用请求的部分结果是包含一些 CSS 文件的 HTML(在移动 View 中显示为广告)。在移动 View 中加载 HTML 时,不会加载 CSS 文件,因为它们似乎不可跨源访问。

有什么我想念的吗?我错过了任何配置步骤吗?

我的 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 => .... );
...
}

最佳答案

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;
}
}

试试我的完整样本 https://github.com/DureSameen/CorsStaticFiles

关于asp.net - CORS 适用于对 API 的直接请求,但不适用于静态文件(如 css),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com