在获取请求中传递json params

时间:2015-11-21 15:35:04

标签: c# .net refit

我有:

public class Query {...}
public interface IClient
{
    [Get("/api/endpoint?data={query}")]
    Task<Result> GetData(Query query);
}

但是在Query实例上的Refit调用ToString而不是使用序列化器。有没有办法在不使用包装类的情况下实现这一点?

2 个答案:

答案 0 :(得分:0)

如果我理解正确的文档,唯一的问题是命名。由于您将它用作参数而不是路径的一部分,因此它更接近于此:

public class Query {...}
public interface IClient
{
    [Get("/api/endpoint")]
    Task<Result> GetData(Query data);
}

然后像往常一样调用它:

GetData(aQueryObject);

http://myhost/api/endpoint?data=somestuff

答案 1 :(得分:0)

我最终使用了一个自定义序列化程序,除了基本类型和实现IConvertible的那些类型之外,它还转换为JSON:

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()
};