以对象作为参数的 HttpWebRequest GET

dze*_*siz 1 c# asp.net-mvc http-get httpwebrequest http-headers

我正在尝试从 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;
    }
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但现在我需要通过 GET 请求传递一个参数。该参数是一个对象,而不是原始类型。

我是否在查询字符串中逐个属性地解构它?或者我是否以某种方式将其添加到请求标头?我确实计划依赖API 控制器中的DefaultModelBinder 。任何计划将不胜感激。

Ale*_* I. 5

API端:

您需要[FromUri]在 API 操作中使用属性。

有关参数绑定的更多信息,请查看此链接

public class SomeData
{
    public int Start { get; set; } 
    public int End { get; set; }
}
public SomeController : ApiController
{
    public HttpResponseMessage Get([FromUri] SomeData data) { ... }
}
Run Code Online (Sandbox Code Playgroud)

客户端

您需要像往常一样在查询中发送参数。

http://localhost/api/Some?Start=0&End=10
Run Code Online (Sandbox Code Playgroud)

另外,还有一个更有趣的详细信息链接,请参见此处