C# 如何加上「;访问控制允许凭据(&Q);ASP.NET中POST请求的请求头?
因此,我尝试使用C# 如何加上「;访问控制允许凭据(&Q);ASP.NET中POST请求的请求头?,c#,asp.net,cors,backend,C#,Asp.net,Cors,Backend,因此,我尝试使用HttpContext.Request.Headers.Add(“访问控制允许凭据”,“true”),但它只适用于我的GET请求,而不适用于我的POST请求,我不知道为什么 我还尝试在Startup.cs中设置这些,如下所示: services.AddCors(o => o.AddPolicy("ApiCorsPolicy", builder => { builder
HttpContext.Request.Headers.Add(“访问控制允许凭据”,“true”)代码>,但它只适用于我的GET请求,而不适用于我的POST请求,我不知道为什么
我还尝试在Startup.cs中设置这些,如下所示:
services.AddCors(o => o.AddPolicy("ApiCorsPolicy", builder =>
{
builder
.WithOrigins("My_Web_App")
.AllowCredentials()
.AllowAnyMethod()
.AllowAnyHeader();
}));
然后在Configure withapp.UseCors(“ApiCorsPolicy”)中使用它代码>
这是我控制器的代码,所以这里没什么特别的,我想:
[ApiController]
[Route("[controller]")]
[EnableCors("ApiCorsPolicy")]
public class UserController : Controller
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
[HttpPost("RegisterUser")]
public void GetTournaments([FromBody] UserDTO user)
{
HttpContext.Request.Headers.Add("Access-Control-Allow-Credentials", "true");
_userService.RegisterUser(user);
}
}
我的问题是,为什么我不能使用标题放置“Access Control Allow Credentials”标题。add
方法(它适用于我的GET请求)?如果这不是正确的方法,那么怎么做呢?
谢谢
编辑:
我已按要求添加了所有启动文件:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(o => o.AddPolicy("ApiCorsPolicy", builder =>
{
builder
.WithOrigins("http://"MyIpAddressHere"/")
.AllowAnyMethod()
.AllowAnyHeader();
}));
var mapperConfig = new MapperConfiguration(mc =>
{
mc.AddProfile(new MappingGeneral());
});
IMapper mapper = mapperConfig.CreateMapper();
services.AddSingleton(mapper);
services.AddSingleton<ITournamentService, TournamentService>();
services.AddSingleton<IUserService, UserService>();
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "my_app", Version = "v1" });
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "my_app v1"));
}
app.UseRouting();
app.UseCors("ApiCorsPolicy");
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
公共类启动
{
公共启动(IConfiguration配置)
{
配置=配置;
}
公共IConfiguration配置{get;}
public void配置服务(IServiceCollection服务)
{
services.AddCors(o=>o.AddPolicy(“ApiCorsPolicy”,builder=>
{
建设者
.WithOrigins(“http://“MyIpAddressHere”/”)
.AllowAnyMethod()
.AllowAnyHeader();
}));
var mapperConfig=新的MapperConfiguration(mc=>
{
mc.AddProfile(新的MappingGeneral());
});
IMapper mapper=mapperConfig.CreateMapper();
服务。AddSingleton(映射器);
services.AddSingleton();
services.AddSingleton();
services.AddControllers();
services.AddSwaggerGen(c=>
{
c、 SwaggerDoc(“v1”,新OpenApiInfo{Title=“my_app”,Version=“v1”});
});
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c=>c.SwaggerEndpoint(“/swagger/v1/swagger.json”,“my_app v1”);
}
app.UseRouting();
附录UseCors(“ApiCorsPolicy”);
app.UseAuthorization();
app.UseEndpoints(端点=>
{
endpoints.MapControllers();
});
}
}
更改
.WithOrigins("My_Web_App")
到
并从代码中删除:
//sometimes it interfers with token if you have
.AllowCredentials()
// you don't need this at all
HttpContext.Request.Headers.Add("Access-Control-Allow-Credentials", "true");
您的UseCors应该在UseRouting之后但在UseAuthorization之前
并从控制器中删除:
[EnableCors("ApiCorsPolicy")]
我高度怀疑罪魁祸首是:
如果没有正确的来源,则不支持凭据。如果尝试响应.headers.add,则访问控制允许凭据也不起作用。
我已经对.WithOrigins(“)进行了第一次更改,并在第二步尝试删除这两个选项,但仍然无法正常工作。显示的错误是什么?您的Url不应包含最后一个“/”。其中我有以下内容:。WithOrigins(“http://MY IP HERE/
”)它适用于我所有的get请求,但不适用于postSo。那么,有什么办法可以解决它呢?我非常渴望找到答案!!!
[EnableCors("ApiCorsPolicy")]