Flurl (Fluent Url) настраиваемая сериализация

Как переопределить поведение Flurl по умолчанию при сериализации объектов для запроса строковых значений? Например, код ниже

DateTime date = new DateTime(2017, 1, 2, 3, 4, 5);
Url url = "http://domain.com".SetQueryParam("date", date);

производит следующий URL:

http://domain.com?date=01%2F02%2F2017%2003%3A04%3A05

Что я хочу это:

http://domain.com?date=2017-01-02T03%3A04%3A05.0000000

что будет результатом сериализации даты следующим образом:

date.ToString("O")

1 ответ

Flurl заботится о кодировании URL, но в действительности это не касается пользовательского форматирования строк. Я думаю, самый очевидный способ сделать то, что вы хотите, это:

"http://domain.com".SetQueryParam("date", date.ToString("O"));

Если вы много делаете это и хотите не указывать бит форматирования каждый раз, вы можете добавить свои собственные методы расширения (один для Url и один для stringсогласно шаблону):

public static Url SetDateParam(this Url url, string name, DateTime date)
{
    return url.SetQueryParam(name, date.ToString("O"));
}

public static Url SetDateParam(this string url, string name, DateTime date)
{
    return new Url(url).SetDateParam(name, date);
}

Тогда у вас есть:

"http://domain.com".SetDateParam("date", date);
Другие вопросы по тегам