WebRequest 不会传递标头

本文关键字:WebRequest | 更新日期: 2023-09-27 18:31:05

我已经拖钓并尝试了一切,我以前做过 100 次没有问题,但现在我被难住了。

我只想从网络请求传递标头信息。

客户端单独运行并连接到 wcf rest 服务。 该服务有以下代码被命中:

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Authorization, Origin, Content-Type, Accept, X-Requested-With");

客户端有这个:

    var client = WebRequest.Create(url);
    client.Method = type.ToString().ToUpper();
    client.ContentType = "application/json";
    client.ContentLength = bytes.Length;
    client.Headers.Add(String.Format("Authorization: {0}", "test12345"));

我也尝试过例如:

    client.Headers["X-Requested-With"] = "test1234";
    client.Headers["Authorization"] = "test1234";

无论我如何尝试设置标题,它们都不会被传递。 当我在小提琴手中查看请求时,授权永远不会存在。 我也尝试发送X请求,等等...但无论如何,标题都不会通过。

提前谢谢。

更新:我发现了问题,但没有找到解决方案:从 MVC 控制器中使用时 ASP.NET WebRequest 不会传递标头

WebRequest 不会传递标头

服务器是否需要身份验证?根据此答案,WebRequest 在受到质询之前不会发送凭据。如果你想发送它,不管你可能需要使用与WebRequest不同的类来发送请求,例如 RestSharp

您可以使用 RestSharp 代替 WebRequest。它有一个简单的抽象和API。

我知道

可能有点太晚了(在寻找我的问题的一些答案时发现了这一点)。

不知道它是否会对您有所帮助,但我的就是这样,我在服务器端有授权标头,我使用的是 4.5.1。

客户端

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Headers[HttpRequestHeader.Authorization] = "basic " +
            Convert.ToBase64String(
            Encoding.ASCII.GetBytes(
            string.Format("{0}|{1}", "login", "password")));
string result = string.Empty;
using (WebResponse resp = (HttpWebResponse)req.GetResponse())
{
    using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
    {
        result = sr.ReadToEnd();
    }
}

服务器端

WebOperationContext.Current.IncomingRequest.Headers[HttpRequestHeader.Authorization]

使用 DefaultRequestHeaders

客户。DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("test12345")