以 object 作为参数的 HttpWebRequest GET

HttpWebRequest GET with object as parameter

我正在尝试从 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 请求中传递一个参数。该参数是 object,而不是原始类型。

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

你的对象是这样的吗?那么列表中有多个属性吗?

public class RootObject
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public object Attachment { get; set; }
}

如果是这样你可以用Json.Convert序列化它。之后,您将获得一个字符串,您可以随请求传递什么。具体是什么对象。是aspmvc的授权吗?如果是这样,您很可能需要 OAuth 访问令牌。

希望对您有所帮助

API 边:

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

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

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

客户端

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

http://localhost/api/Some?Start=0&End=10

还有一个更有趣的link细节是here

我更喜欢用 RestSharp 处理所有休息请求。而且它会解决你的问题。

正如记者所提到的,对象的属性比不对 API 控制器进行任何更改的情况下可以通过以下方式完成的属性少。

var request = new RestRequest(url).AddParameter("paramName", "paramValue", ParameterType.GetOrPost);

你可以通过 :

得到结果
IRestResponse response = client.Execute(request);

其中 clientRestClient class 处理您所有的 request/response activity.