【发布时间】:2020-01-17 08:46:39
【问题描述】:
我正在尝试从 Windows 服务调用 API。 API 是用 ASP MVC 编写的。到目前为止,我正在创建类似这样的请求:
private List<T> GetCollectionFromApi<T>(string url)
{
List<T> result = new List<T>();
try
{
var request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "GET";
using (var response = (HttpWebResponse) request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
using (var sr = new StreamReader(stream))
{
result.AddRange(JsonConvert.DeserializeObject<List<T>>(sr.ReadToEnd()));
}
}
}
}
catch (Exception e)
{
// handle err
}
return result;
}
这一切都很好,但现在我需要在我的 GET 请求中传递一个参数。该参数是一个对象,而不是原始类型。
我是否在查询字符串中逐个属性地解构它?还是我以某种方式将其添加到请求标头?我确实计划依赖 API 控制器中的 DefaultModelBinder。任何计划都将不胜感激。
【问题讨论】:
-
我有同样的情况,并通过使用POST方法解决它并将对象放入请求内容。不幸的是,我没有找到正确的方法来使用请求标头
-
这就是我询问 GET 的原因 :)
-
这样您就可以将其解构为查询字符串。但是,它将需要具有与对象属性相对应的参数的控制器方法。并且每次在对象类中添加|删除属性时,您都必须修改控制器方法。
-
“但现在我需要通过我的 GET 请求传递一个参数” - 显示接受此请求的控制器,否则我们不能说什么。另外,不要使用 HttpWebRequest,使用 HttpClient。
-
如果是GET请求,一般只使用查询字符串参数即可。亚历山大的回答完美地说明了这一点。
标签: c# asp.net-mvc http-headers httpwebrequest http-get