我不能使用 ajax 调用 api 但邮递员调用没问题

Posted

技术标签:

【中文标题】我不能使用 ajax 调用 api 但邮递员调用没问题【英文标题】:I can't use ajax call api but postman call is ok 【发布时间】:2019-09-22 17:14:20 【问题描述】:

我不能使用 ajax 调用 API,但邮递员调用 API 没问题。我在 .net core 2.2 上开发 web API 并开发 asp.net core MVC。然后我用ajax调用API url "https://localhost:44349" 出现错误,如图1。

API:员工控制器

[HttpPost("CheckAuth")]
public IActionResult checkAuth(EmployeeLoginRequest req)
    
        // logic
        return Ok(JsonConvert.SerializeObject(employeeLoginResponse));
    

API:启动

public void ConfigureServices(IServiceCollection services)
        
            services.AddCors();
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        
            if (env.IsDevelopment())
            
                app.UseDeveloperExceptionPage();
            
            else
            
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            

            app.UseCors(
                options => options.WithOrigins("https://localhost:44320").AllowAnyMethod()
            );
            app.UseHttpsRedirection();
            app.UseMvc();
        

WEB 应用:Index.cshtml

var data = 
                "username": $.trim($("#inputUsername").val()),
                "password": $.trim($("#inputPassword").val())
            ;

            $.ajax(
                url: "https://localhost:44349/Employee/CheckAuth",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: data,
                success: function (data, textStatus, xhr) 
                    console.log(data);
                ,
                error: function (xhr, textStatus, errorThrown) 
                    console.log(xhr);
                    console.log(textStatus);
                    console.log(errorThrown);
                
            );

我该如何解决?

备注 API 网址:https://localhost:44349 网址:https://localhost:44320

【问题讨论】:

【参考方案1】:

试着改成这样:

app.UseCors(
    options => options.WithOrigins("https://localhost:44349").AllowAnyMethod()
);

【讨论】:

【参考方案2】:

您需要启用 CORS 才能解决此问题, 请按照以下步骤操作: https://www.c-sharpcorner.com/article/enabling-cors-in-asp-net-core-api-application/

如果您已经启用它,请检查以下网址并尝试这些步骤。 Missing token 'access-control-allow-headers' in CORS header 'Access-Control-Allow-Headers' from CORS preflight channel

【讨论】:

您是否注意到 OP 确实在 .Net Core API(不是 web api 2)上启用了 CORS?

以上是关于我不能使用 ajax 调用 api 但邮递员调用没问题的主要内容,如果未能解决你的问题,请参考以下文章

球衣后端 jquery AJAX API 调用中的 Cors 策略阻塞

使用 C# HttpClient API 和 postman 测试的区别?客户端调用适用于邮递员,但不适用于 C# httpClient getAsync

API调用在ReactJS中得到CORS错误,但在节点和邮递员中得到响应

React 原生调用 API axios 网络

调用.Net API时如何解决邮递员中的401未授权错误

Mailchimp 如何在 javascript 中调用 mailchimp 3.0 API