.NetCore HttpWebRequest GET 中带有查询的字符串列表

Posted

技术标签:

【中文标题】.NetCore HttpWebRequest GET 中带有查询的字符串列表【英文标题】:.NetCore list of string in HttpWebRequest GET with Query 【发布时间】:2021-10-18 04:13:54 【问题描述】:

我有一个 GET API,其中期望来自查询参数的字段。 看起来像这样

public List<Sms> SendSms([FromQuery] string apiKey, [FromQuery] string accountKey, [FromQuery] string appId,[FromQuery] string userId, [FromQuery] string message, [FromQuery] bool isHighSpeed = false,[FromQuery] List<string> mobile)

     // do something    

在此 API 中,我希望在字符串列表中使用移动设备。 当我在我的另一个项目中通过网络请求调用这个 api 时。 我正在添加手机号码,但它不需要任何东西并使用System.Collections.Generic.List'1[System.String] 之类的东西 那。 我不知道如何在 httpweb 请求的查询参数中给出字符串列表。 这是网络请求:

public virtual bool SendSms(SmsResponse sms)

    try
    
        var message  = sms.message;
        var mobile = sms.mobile;
        var apiKey = Config.GetSection("Sms:apiKey").Value;
        var userId = Config.GetSection("Sms:userId").Value;
        var accountKey = Config.GetSection("Sms:accountKey").Value;
        var appId = Config.GetSection("fusionAuth:Client_Id").Value;
        var query = $"apiKey=apiKey&accountKey=accountKey&userId=userId&appId=appId&message=message&mobile=mobile&isHighSpeed=false";

        string createreq = string.Format($"Config.GetSection("Sms:Url").Get<string>()SMS/SendSms?query");
        HttpWebRequest request = WebRequest.Create(createreq) as HttpWebRequest;
        request.Method = "GET"; 
        request.ContentType = "application/json";
        request.Accept = "application/json; charset=utf-8"; 

        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        
            if (response.StatusCode != HttpStatusCode.OK)
            
                throw new Exception(String.Format("Server error (HTTP 0: 1).", response.StatusCode, response.StatusDescription));
            
            Stream dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            List<SmsResponse> Data = JsonConvert.DeserializeObject<List<SmsResponse>>(responseFromServer);
            if (string.IsNullOrEmpty(Data[0].extMessageId))
             
                return false;
            
        
        return true;
    
    catch (WebException ex)
    
        var resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
        return false;
    

【问题讨论】:

我认为问题应该是 List 的编码。尝试将列表作为连接字符串传递并在最后拆分。您能否在通话前分享query 的值? 【参考方案1】:

请查看SmsResponse 类。 mobile是哪一种?

获取移动参数的方式是正确的。

而且你还需要确定请求url的格式。

 var query = $"apiKey=apiKey&accountKey=accountKey&userId=userId&appId=appId&message=message&mobile=mobile&isHighSpeed=false";

1.如果手机的类型是string,你的代码应该如下:

2。如果手机类型是List&lt;string&gt;,你的代码应该如下:

【讨论】:

以上是关于.NetCore HttpWebRequest GET 中带有查询的字符串列表的主要内容,如果未能解决你的问题,请参考以下文章

WebClient, HttpClient, HttpWebRequest ,RestSharp之间的区别与抉择

WebClient, HttpClient, HttpWebRequest ,RestSharp之间的区别与抉择

C#.NET 4.0 - HttpWebRequest.GetRepsonse() 无法访问 Web 服务

C#使用HttpWebRequest发送数据和使用HttpWebResponse接收数据的一个简单示例

C# API 调用不能与 HttpWebRequest 一起使用,但可以与 Postman 一起使用

HttpClient替换HttpWebRequest--以GET和POST请求为例说明