asp.net-web-api - 如何将 GET 中的复杂对象发送到 WEB API 2

标签 asp.net-web-api dotnet-httpclient

假设您有以下代码

public class MyClass {
   public double Latitude {get; set;}
   public double Longitude {get; set;}
}
public class Criteria
{
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public MyClass MyProp {get; set;}
}

[HttpGet]    
public Criteria Get([FromUri] Criteria c)
{
  return c;
}

我想知道是否有人知道有一个库可以将任何对象转换为 WEB API 2 Controller 可以理解的查询字符串。

这是我想要的示例

SerializeToQueryString(new Criteria{StartDate=DateTime.Today, EndDate = DateTime.Today.AddDays(1), MyProp = new MyProp{Latitude=1, Longitude=3}}); 
=> "startDate=2015-10-13&endDate=2015-10-14&myProp.latitude=1&myProp.longitude=3"

使用 httpClient 的完整示例可能如下所示:

new HttpClient("http://localhost").GetAsync("/tmp?"+SerializeToQueryString(new Criteria{StartDate=DateTime.Today, EndDate = DateTime.Today.AddDays(1), MyProp = new MyProp{Latitude=1, Longitude=3}})).Result;

目前,我使用一个版本(取自一个我再也没有找到的问题,也许 How do I serialize an object into query-string format? ...)。

问题是它除了简单属性之外不起作用。 例如,在 Date 上调用 ToString 不会提供 WEB API 2 Controller 可解析的内容...

    private string SerializeToQueryString<T>(T aObject)
    {
        var query = HttpUtility.ParseQueryString(string.Empty);
        var fields = typeof(T).GetProperties();
        foreach (var field in fields)
        {
            string key = field.Name;
            var value = field.GetValue(aObject);
            if (value != null)
                query[key] = value.ToString();
        }
        return query.ToString();
    }

最佳答案

“将任何对象转换为查询字符串”似乎暗示有一个标准格式,但实际上并没有。所以你需要选择一个或自己推出。由于可用的优秀库,JSON 似乎是显而易见的选择。

关于asp.net-web-api - 如何将 GET 中的复杂对象发送到 WEB API 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33099089/

相关文章:

c# - 为什么 IE11 会在 Fiddler 运行时创建空白的发布请求?

c# - 在 Web Api Controller 中使用重定向(发现 HTTP 302)

c# - 无法在 Web API 响应中序列化 ByteArraycontent 类型

c# - 使用 System.Net.HttpClient 上传时如何跟踪进度?

C# HttpClient POST 请求处理响应

c# - 在 HttpClient 上使用带有自定义数据的 DelegatingHandler

asp.net-mvc - ASP.NET Web API 无法在 Azure 上运行

c# - HttpClient 和 PushStreamContent

c# - 在 .Net Core 中捕获 Polly 中的最后一个异常?

c# - 取消静态 HttpClient 上的异步调用