【问题标题】:Sending NameValueCollection to http request C#将 NameValueCollection 发送到 http 请求 C#
【发布时间】:2018-03-19 20:40:55
【问题描述】:

我有这种情况。 我们正在使用某种登录方法,但该方法处于更高的抽象级别,因此它只有用户名和密码等参数,并且使用此参数生成一些名称值集合,然后传递给某个请求构建器。注入此请求生成器,以便我可以更改它的实现。现在我们使用的是 POST 请求,但将来我们可能会使用 XML 或 JSON,因此只需切换注入接口的实现即可。

问题是我无法处理任何会使我 System.Net.HttpWebRequest 脱离此名称值集合的库。 我需要这样的原型方法:

WebRequest / HttpWebRequest  CreateRequest(Uri / string, nameValueCollection);

或者如果没有类似的东西,完成所有工作(发送请求、接收响应和解析它们)的库也会很好。但它需要是异步的。

提前致谢。

【问题讨论】:

    标签: c# httpwebrequest


    【解决方案1】:

    我不能 100% 确定您想要什么,但是要创建一个 Web 请求,该请求将从 NameValueCollection 发布一些数据,您可以使用如下内容:

    HttpWebRequest GetRequest(String url, NameValueCollection nameValueCollection)
    {
        // Here we convert the nameValueCollection to POST data.
        // This will only work if nameValueCollection contains some items.
        var parameters = new StringBuilder();
    
        foreach (string key in nameValueCollection.Keys)
        {
            parameters.AppendFormat("{0}={1}&", 
                HttpUtility.UrlEncode(key), 
                HttpUtility.UrlEncode(nameValueCollection[key]));
        }
    
        parameters.Length -= 1;
    
        // Here we create the request and write the POST data to it.
        var request = (HttpWebRequest)HttpWebRequest.Create(url);
        request.Method = "POST";
    
        using (var writer = new StreamWriter(request.GetRequestStream()))
        {
            writer.Write(parameters.ToString());
        }
    
        return request;
    }
    

    但是,您发布的数据将取决于您接受的格式。此示例使用查询字符串格式,但如果您切换到 JSON 或其他格式,您只需更改处理 NameValueCollection 的方式。

    【讨论】:

    • 是的,这正是我所需要的。 :) 谢谢亚历克斯。
    • 我做了类似的事情,最后发现 NameValueCollection 将作为字符串转换为 html 查询字符串。所以不需要做字符串生成器。
    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多