如何在Angular 1 + Web Api 2中发送跨源请求的自定义标头?

时间:2019-01-05 05:02:03

标签: api web cors

每个人。我有与CORS相关的问题,需要您的帮助。如果可以,请你帮助我。 我有一个Web Api 2项目:

    [AuthorizeUser]
    public class ValuesController : ApiController
    {
        [Route("api/value/get")]
        [HttpPost]
        public IHttpActionResult Get()
        {
            return Ok("Hello world!");
        }
    }

在WebApiConfig.cs中配置

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            var cors = new EnableCorsAttribute("*", "*", "*");
            config.EnableCors(cors);

            // Web API routes
            config.MapHttpAttributeRoutes();

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

以及来自客户端Angular 1的请求

$scope.getvalue = function () {
            var url = "http://localhost:59073/api/value/get";
            $http({
                method: "POST",
                url: url,
                header: {
                    'x-access-token': 'abc'
                }
            }).then(function onSuccess(res) {
                console.log(res);
            }).then(function onError(err) {
                console.log(res);
            });
        }

但是我无法在服务器端获得POST请求标头的自定义标头“ x-access-token”。而且我也没有在Chrome的“网络”标签中看到任何“选项”请求。 请帮我。非常感谢。

1 个答案:

答案 0 :(得分:0)

我知道这为时已晚。它将帮助遇到相同问题的人。在您的示例中,您已经为header属性分配了一个对象。我认为这是一个错字。应该是标题而不是标题。

var req = {
   method: 'POST',
   url: 'http://example.com',
   headers: {
      'Content-Type':'x-access-token': 'abc'
   },
   data: { test: 'test' }
}

$http(req).then(function(){...}, function(){...});

请参考Angular1.x的官方文档

https://docs.angularjs.org/api/ng/service/ $ http#setting-http-headers