отправка в службу отдыха с restsharp - PullRequest
2 голосов
/ 19 января 2012

Хорошо, я предполагаю, что это легко, но я нигде не могу найти свой ответ ... У меня есть клиент, которому нужно запросить остальные API через .net.Он прислал мне URL-адрес API и образец данных.Вот что он отправил:

<?xml version="1.0"?>
<root>
<request>
<APIClientID>0</APIClientID >
<Version>0</Version>
<APIPassword>password</APIPassword >
<Function>functionName</Function >
<Params>
<UserId>(current-datetime)</UserId >
<page>example.aspx</page>
<application>appName</application>
<function>functionName</function>
</Params>
</request >
</root >

Я использую Restsharp и пытаюсь сделать сообщение в сервис.Но я продолжаю возвращаться на страницу получения с деталями API.Это то, что я делаю с restsharp ...

var client = new RestClient();
client.BaseUrl = url;

var request = new RestRequest(Method.POST);

request.AddHeader("APIClientID", "4");
request.AddHeader("Version", "0");
request.AddHeader("APIPassword", "password");
request.AddHeader("Function", "TransAPIStats");
request.AddHeader("Version", "0");
request.AddParameter("Client", "test client");
request.AddParameter("UserId", DateTime.Now.ToString());
request.AddParameter("Page", "example.aspx");
request.AddParameter("Application", "app");
request.AddParameter("Function", "function");

RestResponse response = client.Execute(request);

Любые мысли о том, где я иду не так, будут с благодарностью!Я предполагаю, что в hte xml есть что-то, что я не могу правильно перевести на вызов restsharp, но на данный момент я потерян ... спасибо!

1 Ответ

3 голосов
/ 19 января 2012

Если тело POST должно быть документом XML, используйте AddBody ().По умолчанию он сериализует объект, переданный ему в виде XML.Вы можете сделать это с анонимным объектом, который соответствует схеме, которую вы пытаетесь создать:

var client = new RestClient();
client.BaseUrl = url;

var request = new RestRequest(Method.POST);
request.AddBody(new {
    root = new {
        request = new {
            APIClientID = 4,
            Version = 0,
            APIPassword = "password",
            Function = "TransAPIStats",
            Params = new {
                UserId = "abc",
                page = "example.aspx",
                Application = "hrblock-cb",
                Function = "ecb"
            }
        }
    }
});

Или вы можете определить простой объект C #, который соответствует схеме, и использовать его вместо встроенного анонимного объекта.

Если вам нужен контроль над сериализацией (по умолчанию должно работать на основе данных примера, которые вы показываете), вы можете реализовать свой собственный ISerializer.Документы для этого являются последним разделом здесь: https://github.com/restsharp/RestSharp/wiki/Deserialization

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...