C# 在get请求中传递json参数
我有:C# 在get请求中传递json参数,c#,.net,refit,C#,.net,Refit,我有: 公共类查询{…} 公共接口客户端 { [Get(“/api/endpoint?data={query}”)] 任务获取数据(查询); } 但是在查询实例上重新安装调用ToString,而不是使用序列化程序。有没有办法不用包装器类来实现这一点?如果我正确理解文档,唯一的问题就是命名。由于您将其用作参数而不是路径的一部分,因此它更接近于此: public class Query {...} public interface IClient { [Get("/api/endpoint
公共类查询{…}
公共接口客户端
{
[Get(“/api/endpoint?data={query}”)]
任务获取数据(查询);
}
但是在查询实例上重新安装调用ToString,而不是使用序列化程序。有没有办法不用包装器类来实现这一点?如果我正确理解文档,唯一的问题就是命名。由于您将其用作参数而不是路径的一部分,因此它更接近于此:
public class Query {...}
public interface IClient
{
[Get("/api/endpoint?data={query}")]
Task<Result> GetData(Query query);
}
或
最后,我使用了一个自定义序列化程序,它可以将除基元类型和实现IConvertible的类型之外的所有类型转换为JSON:
http://myhost/api/endpoint?data=somestuff
不幸的是,这种方式也使用了ToString。我在ReFit上也遇到了同样的问题(它不允许您更改url中的内容的序列化方式),并决定推出我自己的类似ReFit的项目。只要您的代码不应该从windows应用商店或其他地方下载,您就可以使用WebAnchor,它将让您决定如何序列化您的查询对象。@mattias WebAnchor值得称赞,但是您可以使用带有ReficateAllright的自定义查询序列化程序,这对我来说是新闻。:)美好的
GetData(aQueryObject);
http://myhost/api/endpoint?data=somestuff
class DefaultUrlParameterFormatter : IUrlParameterFormatter
{
public string Format(object value, ParameterInfo parameterInfo)
{
if (value == null)
return null;
if (parameterInfo.ParameterType.IsPrimitive)
return value.ToString();
var convertible = value as IConvertible; //e.g. string, DateTime
if (convertible != null)
return convertible.ToString();
return JsonConvert.SerializeObject(value);
}
}
var settings = new RefitSettings
{
UrlParameterFormatter = new DefaultUrlParameterFormatter()
};