我将以下请求发送到我的本地Web API服务。
$http.defaults.headers.common.something = 'anything';
$http({
method: 'GET',
url: 'http://localhost/FantasyTradeAnalyzer/api/home/ListLeagues',
})
.success(function (data)
{
$http.defaults.headers.common.something = undefined;
});
我的Web Api服务中的以下代码
[AcceptVerbs("GET")]
public LeaguesViewModel ListLeagues(HttpRequestMessage request)
{
var re = Request;
var headers = re.Headers;
if (headers.Contains("something"))
{ //do stuff }
}
但是,当我查看Fiddler(以及C#调试器)时,我看不到我在Header中发送的自定义字段。我在这里错过了什么?这两件事(Angular和Web Api)都托管在我的本地IIS,不同的网站上。
答案 0 :(得分:1)
有趣的是,向您的URI添加显式协议(http
)将导致您的标头无法添加。此外,您应该使用"标题" config中的选项,它作为对象传递给$http
。将配置选项传递给配置是多余的,并且不起作用,因为您已经在配置对象中。
angular.module('app', [])
.controller('TestCtrl', function($http) {
$http({
method: 'GET',
url: 'www.google.com/test',
headers: { 'something': 'anything' }
})
.success(function (data)
{});
});
或者,您可以在.get()
上使用简写$http
方法。
$http.get(www.google.com/test', {
'something': 'anything' }
)
值得注意的是一些警告:
如果您正在根据自定义标头执行任何类型的更新或更改,您应该发送POST或PATCH,因为存在副作用,而您不仅仅是只是检索数据,有时GET需要并且应该使用自定义标头发送。
这会替换所有标头,因此您需要重新添加所需的任何适用标头,因为它根据documentation充当覆盖。
此外,您可以在config对象中提供headers属性 调用$ http(config)时传递,它会覆盖默认值 没有全局改变它们。
最后,如果您想避免删除默认标头,另一个选项是全局修改该标头的默认值,尽管您希望在请求后删除它。这很笨拙,但它不需要您手动重建标题。
angular.module('app', [])
.controller('TestCtrl', function($http) {
$http.defaults.headers.common.something = 'anything';
$http({
method: 'GET',
url: 'www.google.com/test'
})
.success(function (data) {
$http.defaults.headers.common.something = undefined;
});
});
要在WebAPI方法中检索标题:
var foo = request.Headers.GetValues("test").FirstOrDefault();