c# - 系统参数异常 : The header has an empty value

标签 c# http windows-phone-8 windows-phone windows-phone-8.1

我得到一个异常,因为“ header 有一个空值”。这是 POST 请求。在某些情况下,我需要将一些 header 值发送为空。

这是我的代码:

private void Start()
{
    try
    {
        this.webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(this.requestURL);
        //this.webRequest.Headers[HttpRequestHeader.UserAgent] = this.userAgent;
        webRequest.Headers[HttpRequestHeader.CacheControl] = "no-cache";
        webRequest.Headers[HttpRequestHeader.Pragma] = "no-cache";
        webRequest.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.UtcNow.ToString();
        webRequest.Method = "POST";

        if (headers != null && headers.Count > 0)
        {
            webRequest.Headers["some-Header"] = ""; 
        }

        IAsyncResult result = this.webRequest.BeginGetRequestStream(new AsyncCallback(RequestCallback), webRequest);
    }
    catch (Exception ex)
    {
    }
}

void RequestCallback(IAsyncResult result)
{
    HttpWebRequest request = (HttpWebRequest)result.AsyncState;

    //if (RequestBody != null)
    {
        using (Stream postStream = request.EndGetRequestStream(result))
        {
            using (var writer = new StreamWriter(postStream))
            {
                writer.Write(string.Empty);
                writer.Flush();
                postStream.Position = 0;
                byte[] mArray = new byte[postStream.Length];
                postStream.Read(mArray, 0, (int)postStream.Length);
            }
        }
    }

    request.BeginGetResponse(new AsyncCallback(OnRequestResponse), request);
}

private void OnRequestResponse(IAsyncResult ar)
{
    try
    {
        System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)this.webRequest.EndGetResponse(ar);
        webResponseHeaders = response.Headers.GetHeaders();
        System.IO.Stream responseStream = response.GetResponseStream();
    }
    catch (Exception ex)
    {
    }
}

在 System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)this.webRequest.EndGetResponse(ar) 的 OnRequestResponse 回调中获取异常;

最佳答案

首先,尝试将您的解决方案升级到 Windows Phone 8.1 有 2 个选项:Silverlight 8.1(您可以重用所有代码)或 WP 8.1 RT(在 WP 和 Windows 8.1 之间轻松重用代码)。我建议使用 Silverlight 8.1,因为您已经在开发 Silverlight 8.0 应用程序。

第二件事:回调有点老了。考虑将您的代码升级为 Await 和 Async 方法,因为它自然受支持

对于您的问题,请尝试使用 HttpClient 发送请求。这里有一个代码示例:

public static async Task<string> GetHttpAsStringTask(string uriString)
    {
        string result;

        Uri targetUri = new Uri(uriString);

        HttpClient client = new HttpClient();
        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, targetUri);
        //Add your empty header here
        request.Headers.Add("Header name","header value");
        HttpResponseMessage response = await client.SendAsync(request);

        using (Stream responseStream = await response.Content.ReadAsStreamAsync())
        {
            StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
            result = reader.ReadToEnd();
        }

        return result;
    }

用法:

string response = await GetHttpAsStringTask("your url");

对于 WP 8 中的 await 和 async:http://developer.nokia.com/community/wiki/Asynchronous_Programming_For_Windows_Phone_8

关于c# - 系统参数异常 : The header has an empty value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26843778/

相关文章:

c# - 无法在 VSTO 加载项中的 WPF 窗口上键入

c# - Xamarin Forms Post 请求 Http 问题

c# - 在 Serilog 中记录字典,其中值类型是一个类

django - 为什么多处理在 Django runserver 上工作而不在 nginx uwsgi 上工作?

http - 加载无效或 protected URL 时出现 iframe 和 http 错误

c# - 如何控制电源键按下关机?

http - 当我们有 TCP/IP 时,为什么 HTTP 操作需要是幂等的?

windows-phone-8 - 是否可以使用 NFC 标签或设备执行多项交易? (即阅读不止一次)

c# - UserControl 的本地化属性

c# - WP8错误媒体播放器无法启动