Я начинаю с Flurl и хочу создать POST, но думаю, что у меня проблема с форматом моих параметров JSON.
Вы можете увидеть параметры JSON:
{
"aaaUser" : {
"attributes" : {
"name" : "device:domain\\login",
"pwd" : "123456"
}
}
}
Эти настройки работают с Postman, и теперь я хотел бы использовать Flurl для продолжения моего небольшого POST :) Но мой формат JSON неверен.
using System.Threading.Tasks;
using Flurl.Http;
namespace Script
{
class Program
{
static async Task Main(string[] args)
{
var result = await "https://IP/api/aaaLogin.json".PostUrlEncodedAsync(new
{
name = "device:domain\\login",
pwd = "123456"
});
}
}
}
Спасибо за помощь !
@mason Да, именно сейчас я могу использовать PostJsonAsync. Однако проблема с форматом JSON присутствует всегда. Потому что мне нужно установить первое соединение.
Что вы имеете в виду, что вам нужно установить первое соединение? Какую именно ошибку вы получаете? Пожалуйста, подумайте, как другие люди отнесутся к вашему вопросу. Помните, мы не за вашим компьютером. Мы не видим, что вы делаете. Вам решать, как правильно передать нам информацию в понятном для нас виде.
@mason Хорошо, я сожалею об этом. В настоящее время я использовал Postman для выполнения различных действий (POST -> для первого подключения на моем устройстве, после чего я могу выполнить другое действие GET). Если вы видите мое первое сообщение, я представил JSON, используемый в Postman, и он работает правильно. Итак, теперь я хотел бы использовать Flurl, чтобы сделать то же самое. Однако я думаю, что проблема заключается в моем параметре JSON в моем скрипте, потому что, когда я запускаю его, я получаю: {"totalCount": "1", "imdata": [{"error": {"attributes": {"code": « 400», «text»: «Не удалось проанализировать запрос на вход»}}}]}. Если вам нужна дополнительная информация, не сомневайтесь!
С каким API вы здесь работаете? Есть ли у него документация?
ACI от CISCO, и эта ошибка возникает, когда вы не отправляете то, что запрошено. Я знаю этот API, с которым я работал, и он работает правильно. Нам нужно указать эти параметры `{" aaaUser ": {" attributes ": {" name ":" device: domain \\ login "," pwd ":" 123456 "}}}` И не только user и pwd. Но я не знаю формата в моем сценарии C#.
Определите свой объект JSON для публикации. Создайте структуру класса, которая после сериализации приведет к правильному JSON. Ваш объект, который вы сейчас создаете, представляет собой один объект с двумя строковыми свойствами. Это не соответствует JSON, указанному в верхней части вашего вопроса. Кажется, ваш вопрос касается не Flurl, а простой сериализации JSON.
Да, именно так, но я не могу правильно поместить JSON в этот скрипт.





Думаю, здесь выявлено 2 проблемы.
Вы используете PostUrlEncodedAsync, который будет отправлять данные в URL-кодированном формате, например: name=device:domain\\login&pwd=123456. Если вы хотите сериализовать данные в JSON, используйте вместо этого PostJsonAsync.
Вы включаете только вложенный объект attributes JSON, а не весь объект.
Короче говоря, вам понадобится что-то вроде этого:
var result = await "https://IP/api/aaaLogin.json".PostJsonAsync(new
{
aaaUser = new
{
attributes = new
{
name = "device:domain\\login",
pwd = "123456"
}
}
});
Как только вы зайдете так далеко, вам нужно будет знать, как обрабатывать результаты. Если ответ имеет формат JSON, вы, вероятно, захотите добавить .ReceiveJson() или .ReceiveJson<T>() к вышеуказанному вызову, чтобы иметь более удобный объект для работы. Пожалуйста, обратитесь к документация.
Большое спасибо за этот ответ. Это действительно ясно и моя проблема решена. Буду углублять Flurl :)
Ваш фактический код не отправляет JSON. UrlEncodedAsync не для этого. UrlEncodedAsync предназначен для POSTing, как из HTML-формы. Прочтите документация. Он ясно показывает, как PostJsonAsync.