簡體   English   中英

在獲取請求中傳遞json params

[英]Pass json params in get requests

我有:

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

但是在Query實例上重新調用會調用ToString而不是使用序列化程序。 有沒有辦法在不使用包裝類的情況下實現這一目的?

如果我正確理解文檔,唯一的問題是命名。 由於您將它用作參數而不是路徑的一部分,因此它更接近於此:

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

然后像往常一樣調用它:

GetData(aQueryObject);

要么

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

我最終使用了一個自定義序列化程序,除了基本類型和實現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()
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM