首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向ASP.NET核心Web API发出post请求时阻止跨域请求

向ASP.NET核心Web API发出post请求时阻止跨域请求
EN

Stack Overflow用户
提问于 2018-11-06 05:38:17
回答 1查看 1.4K关注 0票数 4

我有一个有2个控制器的Web API,并且在我的Startup类中启用了Cors,下面是我的ConfigureServices方法:

代码语言:javascript
运行
复制
public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
            {
                builder.AllowAnyOrigin()
                       .AllowAnyMethod()
                       .AllowAnyHeader();
            }));
            services.AddAutoMapper();
        }

下面是配置方法:

代码语言:javascript
运行
复制
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseCors(
        options => options.AllowAnyOrigin()
        .AllowAnyMethod()
        .AllowAnyHeader()
    );

    app.UseHttpsRedirection();
    app.UseMvc();
}

现在,我有两个控制器。当我向此方法发出GET请求时,一切正常:

代码语言:javascript
运行
复制
[Route("api/[controller]")]
[ApiController]
[EnableCors("MyPolicy")]
public class MovieController : ControllerBase
{
    public async Task<IActionResult> Get()
    {
        HttpClient httpClient = new HttpClient();

        var responseMessage = await httpClient.GetAsync("https://copafilmes.azurewebsites.net/api/filmes");

        if (!responseMessage.IsSuccessStatusCode) return null;

        var jsonResult = await responseMessage.Content.ReadAsStringAsync();

        return Ok(jsonResult);
    }

现在,当我尝试对这个进行POST时:

代码语言:javascript
运行
复制
[Route("api/[controller]")]
[ApiController]
[EnableCors("MyPolicy")]
public class CupController : ControllerBase
{
    private readonly IMapper mapper;

    public CupController(IMapper mapper)
    {
        this.mapper = mapper;
    }

    [HttpPost]
    public IActionResult Post([FromBody] IEnumerable<MovieViewModel> moviesViewModel)
    {
        var movies = mapper.Map<IEnumerable<Movie>>(moviesViewModel).ToList();

        var cup = new Cup(movies);
        cup.Run();

        return Ok(cup.Id);
    }
}

然后,我在浏览器控制台中收到以下消息:

代码语言:javascript
运行
复制
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://worldcupapi-gabs.azurewebsites.net/api/cup. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

我正在尝试通过一个Vuejs简单的应用程序来发布这篇文章,你可以在这里尝试一下:https://codesandbox.io/s/j23np20663

只需选择8张卡片(点击它们,它们就会变成灰色),然后点击“提交”按钮。

EN

回答 1

Stack Overflow用户

发布于 2021-09-22 19:35:07

Serpent5在上面提供了一个有效的答案;我之所以添加它作为答案,是因为这是我在搜索CORS问题时得到的第一个命中结果,而我的问题的原因并不完全是Serpent5所指出的,但扩展他的评论可以提供答案。

Serting5的答案基本上是说另一个错误阻碍了服务器的正常响应(例如500内部服务器错误),但是浏览器开发工具控制台显示了CORS错误。

在我的例子中,这是因为我没有在服务器上正确配置https。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53162611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档