前端Ajax,后端.NET C# ASP.NET WebApi配置跨域访问

1.前端写法

    <script src="jquery-1.10.2.js"></script>
    <script>
        function Set() {
            $.ajax({
                url: "http://192.168.0.29:57461/api/User/LoginUser",
                dataType: "json",

/*ajax跨域参数配置 开始*/
                xhrFields: {
                    withCredentials: true
                },
                crossDomain: true,

/*ajax跨域参数配置 结束*/
                data: { Level: "district",
                    Company_Id: "xxxx",
                    User_Id: "xxxx"
                },
                type: "post",
                success: function (data) {
                    console.log(data);
                    alert('成功')
                },
                error: function (data) {
                    alert('失败')
                    console.log(data);
                }
            });
        }
    </script>

2.后端配置

API项目下Web.config文件内,在system.webServer节点下补充以下内容:

<httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Credentials" value="true" />
        <add name="Access-Control-Allow-Origin" value="*" /><!--前端项目地址,多个的话可以使用英文逗号分隔,发布时可改为前端项目地址【可以更安全,也可以不调整-使用*来匹配所有地址、调试时更灵活】-->
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
      </customHeaders>
    </httpProtocol>

3.后端api写法,与正常api写法一样,不需要调整

/// <summary>
    /// 角色权限类接口
    /// </summary>
    public class UserController : ApiController
    {
        public UserController() { }

        [HttpPost]
        public IHttpActionResult LoginUser([FromBody] BaseUserModel model)
        {
            //xxxxx业务代码
            return Ok(new Response<Object>() {Data=true});
        }

    }

public class BaseUserModel : BaseInputModel
    {

    }

public class BaseInputModel
    {
        /// <summary>
        /// 级别
        /// </summary>
        public string Level { get; set; }    

        /// <summary>
        /// 项目平台Id
        /// </summary>
        public string Company_Id { get; set; }


        /// <summary>
        /// 创建人Id
        /// </summary>
        public string User_Id { get; set; }
    }

4.注意:以上实例ajax调用API的路径,需要WebApi项目调整WebApiConfig.cs文件,如下:

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
             // Web API 配置和服务

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",//补充{action}
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }

原文地址:https://www.cnblogs.com/jeff151013/p/14696454.html