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

本文关键字:NET ASP MVC 控制器 WebRequest | 更新日期: 2023-09-27 18:31:16

我有一个 ASP.NET 的MVC 4项目,当我使用webrequest进行http调用时,标头不会通过。

Linqpad 中的相同代码我可以在标头中设置信息,例如授权,并且工作正常(我可以在 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 控制器调用) - 以各种方式设置标头没有影响(即:在 Linqpad 中工作,而不是在 MVC 控制器中工作)

    client.Headers.Set("Authorization", "PwrUp");
    client.Headers["Authorization"] = "ababab11ab";
    client.Headers.Add(String.Format("Authorization:{0}", "Fun-Kitty"));

此代码从 LinqPad 或 Winforms/WPF 应用中传递标头,但不能从 MVC 控制器传递 ASP.NET 标头。

我还注意到,在检查标头时,当从 MVC 控制器进行调用时,设置了以下值(不确定它是否与此有关):

X-Requested-With: XMLHttpRequest

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

我相信您需要删除标题上:右侧的空格,并补充说:

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 文档:

标头参数必须以"名称:值"格式指定。