Определение пользовательских xmlns в Нанси

В веб-сервисе Nancy .Net REST мне нужно иметь возможность указать пользовательский xmlns:xsd для корневого элемента xml-дерева, который создается при использовании приведенного ниже кода - это возможно?:

public class RequestModule : NancyModule
{
    Get["/books"] = parameters =>
    {
        return Response.AsXml(List<Book>);
    };
}

Вызов / книги с использованием кода выше производит вывод, похожий на...

<ArrayOfBook
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Book>
    ...
    </Book>
    ...
</ArrayOfBook>

Предоставляет ли Нэнси возможность изменить значения xmlns:xsd на какой-либо собственный URL-адрес схемы? Так что я бы получил что-то вроде...

<ArrayOfBook
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://myschemaurl.com/2007/MyCustomXMLSchema">
    <Book>
    ...
    </Book>
    ...
</ArrayOfBook>

Если вышеперечисленное невозможно с Нэнси из коробки, кто-то может указать мне место в исходном коде инфраструктуры Нэнси, где я мог бы изменить код для достижения своей цели?

1 ответ

Решение

Response.AsXml - это просто полезный помощник для возврата XML. Вы можете вернуть объект Response по своему усмотрению и установить ContentType и Content на любое содержимое, которое вы хотите. Используйте тот сериализатор, который вам нужен, и просто вставьте его в ответ, и все готово

Если вы хотите использовать Response.AsXml, то вам следует взглянуть на реализацию ISerializer и зарегистрировать его в Bootstrapper -> InternalConfiguration => Serializer. Response.AsXml будет использовать первый ISerializer, который говорит, что он может обрабатывать тип носителя xml

Другие вопросы по тегам