我有一个ASP.NET MVC 4项目,当我使用webrequest进行http调用时,标头将不会通过。
Linqpad中的相同代码,我可以在标题中设置信息,例如AUTHORIZATION,并且可以正常工作(我可以在Fiddler中看到标题值)
但是,当我从我的MCV控制器中执行相同的代码时,标头不会通过。好像ASP.NET MVC覆盖了我的标头。
有什么建议吗?
var client = WebRequest.Create(url);
client.Headers.Add(String.Format("Authorization:{0}", "Fun-Kitty"));
client.Headers.Add(String.Format("X-Requested-With:{0}", "PowerFlower"));
client.Method = "GET";
client.ContentType = "application/json";
HttpWebResponse resp;
using (resp = (HttpWebResponse)client.GetResponse())
{
if (resp.GetResponseStream() != null)
{
var status = resp.StatusDescription; // TODO
var reader = new StreamReader(resp.GetResponseStream());
var obj = reader.ReadToEnd();
}
}
更新:请注意,标头设置正确(使用MVC Controller调用时除外)-以各种方式设置标头没有影响(即:在Linqpad中有效,在MVC Controller中不适用)
client.Headers.Set("Authorization", "PwrUp");
client.Headers["Authorization"] = "ababab11ab";
client.Headers.Add(String.Format("Authorization:{0}", "Fun-Kitty"));
此代码传递的标题恰好来自LinqPad或Winforms / WPF应用程序,但不是来自ASP.NET MVC控制器。
[检查标题时,我还注意到当从MVC控制器进行调用时,设置了以下值(虽然不确定是否与它有任何关系:]
X-Requested-With: XMLHttpRequest
我相信您需要删除标题上:
右侧的空白:
client.Headers.Add(String.Format("Authorization:{0}", "Fun-Kitty"));
client.Headers.Add(String.Format("X-Requested-With:{0}", "PowerFlower"));
或者,使用带有2个字符串参数的重载:
client.Headers.Add("Authorization", "Fun-Kitty");
client.Headers.Add("X-Requested-With", "PowerFlower");
标题参数必须以“名称:值”的格式指定。
我有同样的问题。从IIS不会将任何标头发送到apache服务器