当从ASP.NET MVC控制器中使用WebRequest时,不会传递标头

问题描述 投票:0回答:2

我有一个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
c# asp.net-mvc webrequest
2个回答
0
投票

我相信您需要删除标题上:右侧的空白:

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");

MSDN docs

标题参数必须以“名称:值”的格式指定。


0
投票

我有同样的问题。从IIS不会将任何标头发送到apache服务器

© www.soinside.com 2019 - 2024. All rights reserved.