Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何加上「;访问控制允许凭据(&Q);ASP.NET中POST请求的请求头?_C#_Asp.net_Cors_Backend - Fatal编程技术网

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 with
app.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")]