【ASP.NET Web API】 No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.

一、问题描述

1.1、错误信息

VUE 前端调用C# - ASP.NET API 是报如下错误

xhr.js:178 OPTIONS http://localhost:44383/api/Login/login 405 (Method Not Allowed)
Access to XMLHttpRequest at 'http://localhost:44383/api/Login/login' from origin 'http://localhost:9529' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

 1.2、VUE 前端调用代码

export function login(data) {
  return request({
    url: '/api/v1/Login/Login',
    method: 'post',
    data
  })
}

1.2、后端 ASP.NET WEB API

public class V1LoginController : ApiController 
{
    /// <summary>
    /// 
    /// </summary>
    /// <remarks>
    /// 请求示例
    ///  
    ///     Post api/Login/Login
    ///  
    ///     {
    ///         "username":"admin",
    ///         "password":"c8837b23ff8aaa8a2dde915473ce0991",
    ///     }
    /// </remarks>
    /// <param name="jsonText"></param>
    /// <returns></returns>
    [SwaggerResponse(HttpStatusCode.OK, Description = "正常返回", Type = typeof(RSS_SSDDS.Model.Account.PostLogin.Response))]
    [SwaggerResponse(HttpStatusCode.BadRequest, Description = "错误返回", Type = typeof(RSS_SSDDS.Model.Account.PostLogin.Response))]
    [HttpPost]
    [Route("api/v1/Login/Login")]
    public async Task<IHttpActionResult> Login([FromBody]dynamic jsonText)
    {
        RSS_SSDDS.Model.Account.PostLogin.Response res = new RSS_SSDDS.Model.Account.PostLogin.Response();
        try
        {
            HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];
            String clientIP = context.Request.UserHostAddress;
            var uid = jsonText.username;
            var pw = jsonText.password;
            
            return Ok(res);
        }
        catch (Exception e)
        {
            log.Error("Login异常:" + e.Message);
            res.Exception(e);
            return Ok(res);
        }
    }
}

 

二、解决方案:修改 ASP.NET Web API 得跨域配置

../App_Start/WebApiConfig.cs 启动注册 

SupportsCredentials[Access-Control-Allow-Credentials]  设置为true, 支持用户凭据。

EnableCorsAttribute的第一个参数origins[Access-Control-Allow-Origin] 设置为 * ,允许所有域名都可访问。

using System.Web.Http.Cors;

public static void Register(HttpConfiguration config)
{
    // Web API 配置和服务
    // var allowOrigins = ConfigurationManager.AppSettings["cors_allowOrigins"];
    var globalCors = new EnableCorsAttribute("*", "*", "*")
    {
        SupportsCredentials = true
    };
    config.EnableCors(globalCors);
}

注、使用IIS搭建的网站 

注意调整合适的托管模式:集成与经典加载的配置有很大的不同,设置不合理也会出现跨域报错

在.NET Core中,当你在客户端发起跨域请求时,可能会遇到"No 'Access-Control-Allow-Origin' header is present on the requested resource"的错误。这是由于浏览器的同源策略所导致的安全限制。 为了解决这个问题,你可以在你的.NET Core API中添加CORS(跨域资源共享)配置。CORS配置允许你指定哪些域名或URL可以访问你的API。 以下是一个示例,演示如何.NET Core中配置CORS: 1. 首先,在你的API项目中打开`Startup.cs`文件。 2. 在`ConfigureServices`方法中,添加以下代码来配置CORS: ```csharp public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy("AllowOrigin", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); // 其他服务配置... } ``` 上述代码中,我们创建了一个名为"AllowOrigin"的CORS策略,允许任何来源的请求,任何HTTP方法和任何请求头。 3. 在`Configure`方法中,添加以下代码来启用CORS: ```csharp public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他中间件配置... app.UseCors("AllowOrigin"); // 其他配置... } ``` 上述代码中,我们使用了之前定义的"AllowOrigin"策略来启用CORS。 通过以上配置,你的.NET Core API应该可以处理跨域请求,并在响应中包含"Access-Control-Allow-Origin"头,从而解决"No 'Access-Control-Allow-Origin' header is present on the requested resource"的问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值