Consumir Rest API en C#

Меня gustaría que me pudieran guiar un poco подставляют esto. Estoy tratando de consumir un API Rest en C# y tiene una autenticación надел debo pasarle estos parámetros o доблесть: username, password, client_id, client_secret, grant_type, scope pero никакой sé cómo pasar esos доблесть.

Алгоритм Estoy haciendo asi:

HttpWebRequest request = WebRequest.Create("MiDireccionAPI") as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded"; //"application/json; charset=utf-8";
request.Headers.Add("username", "miUsuario");
request.Headers.Add("password", "MiClave");
request.Headers.Add("grant_type", "Migrant_type");
request.Headers.Add("client_id", "Miclient_id");

HttpWebResponse response = request.GetResponse() as HttpWebResponse;
StreamReader reader = new StreamReader(response.GetResponseStream());
string resp = reader.ReadToEnd();

Y se supone que el debería devolverme un token Комо este y ООН código 200:

eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI0ZTJjZTBlZC02ZDQwLTRmY2EtODgwNS1lMzg0NzdmZmVlNWUiLCJleHAiOjE0OTEyMzEyMzUsIm5iZiI6MCwiaWF0IjoxNDkxMjMwOTM1LCJpc3MiOiJodHRwczovL2lkcC5jb21wcm9iYW50ZXNlbGVjdHJvbmljb3MuZ28uY3IvYXV0aC9yZWFsbXMvcnV0LXN0YWciLCJhdWQiOiJhcGktc3RhZyIsInN1YiI6ImQ1NzQ2NDc0LWVhZWYtNDNkNS05MmE2LTQ4MWQyM2ZlOTM5OSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImFwaS1zdGFnIiwic2Vzc2lvbl9zdGF0ZSI6IjM0Y2Y2MWJiLWU4ZTgtNDYzZS1iMTJjLTFjNTFhYzdmMGE3ZCIsImNsaWVudF9zZXNzaW9uIjoiZDQzNjRmOGUtZmFjOS00NjRiLWE2NzgtYWI2OWU5ODE0YzU4IiwiYWxsb3dlZC1vcmlnaW5zIjpbXSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJ2aWV3LXByb2ZpbGUiXX19LCJuYW1lIjoiR0VTVElPTiBFTiBURUNOT0xPR0lBIEUgSU5GT1JNQUNJT04gRyBUIEkgU09DSUVEQUQgQU5PTklNQSAiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJjcGotMy0xMDEtMjI1ODkwQHN0YWcuY29tcHJvYmFudGVzZWxlY3Ryb25pY29zLmdvLmNyIiwiZ2l2ZW5fbmFtZSI6IkdFU1RJT04gRU4gVEVDTk9MT0dJQSBFIElORk9STUFDSU9OIEcgVCBJIFNPQ0lFREFEIEFOT05JTUEiLCJwb2xpY3ktaWQiOiI1OGE2MjAzMzc2ZWFlMTQwOGNlNWU3ZGQiLCJlbWFpbCI6ImNwai0zLTEwMS0yMjU4OTBAc3RhZy5jb21wcm9iYW50ZXNlbGVjdHJvbmljb3MuZ28uY3IifQ.UyHf8uJg3y6i0mKBlAsCpDKCfO_s5rASurzGgcBfc0Y8jm0cPPPZLNqKbQYXm0NUvpUVnNuC5O634cUFoOFlAOaAQwdnQbki34nXcRn9vb3YXj7bpOKmK1RFoB-Hf6rJ843VQQzC4vHxMUTOOa5k32gFNcWEnlVHclitGRZezJbozYeqCUi3VbzShMPKFAAT5gcDZgw6tgl7gbwiu4Mf4vCvJamKTfaziBBhj-3gVe5yXnEp-WfaH87B3rV9xM69SJ-EGJ1wxfUN3E7PTqjanYGDjA24UY-NRASwfJV9Gwyikk4irSGNCbAiRm70NCaGwFEMjzBetwp0avG0g_tu9Q

Pero я da ошибка 400 porque imagino que el pasado de los parámetros está mal.

СИ alguien я aclarar cómo pasar este tipo de valores API ООН, ya que soy principiante en esto y никакой encontrado алгоритм que realmente я Sirva.

Править:

Фактуры Tengo una web hecha en asp.net que hace y debo consumir esta API y la cual США OAuth 2.0, API esta API es de una entidad gubernamental de mi pais que se encarga de recbir las facturas por esta pero de esta API se debe generar un token para poder enviar lo que se ocupa.

Маркер Aca lo que estoy intentando es generar ese para poder enviar las facturas.

Сеть Esta se publica en un servidor.

Asi se ve en el postman, pero no se como hacerlo para C#

8
задан 03.04.2017, 21:54
2 ответа

у меня была та же твоя проблема и я решил с cГіdigo, который производит Postman в различных языках Она soluciГіn serГ - во что-то как это:

const string URI_TOKEN = "https://login.micro......../oauth2/token";
const string CLIENT_ID = "Tu client Id";
const string GRANT_TYPE = "client_credentials";
const string RESOURCES = "https://Tu propia Url de recursos.com";
const string CLIENT_SECRET = "Coloca tus datos aqui";
const string URI_REQUEST = "La uri del servicio que quieres consumir";

var client = new RestClient(URI_TOKEN);
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Host", "login.microsoftonline.com");
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Accept", "*/*");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
"------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"client_id\"\r\n\r\n" +
CLIENT_ID + "\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"grant_type\"\r\n\r\n" +
GRANT_TYPE + "\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"resource\"\r\n\r\n" +
RESOURCES + "\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"client_secret\"\r\n\r\n" +
CLIENT_SECRET + "\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

Следующая линия - та, которая служит для того, чтобы послать параметры типа multipart/form-data request.AddParameter ( следующий caraceres ------WebKitFormBoundary7MA4YWxkTrZu0gW - concatenador как & querystring.

Как ты комментируешь, что llamadaos с твоего postman оно ты функционирует хорошо, этот инструмент dГЎ она opciГіn произвождения cГіdigo в различных языках.
Смотрит этот post, где ты enseГ±an, как делание этого, этот cГіdigo ты servirГЎ для того, чтобы ты это включил в твои MГ©todo C# https://learning.getpostman.com/docs/postman/sending_api_requests/generate_code_snippets / , надеялся, что он подает тебя и не очень поздно jejeje. удача

-1
ответ дан 24.11.2019, 10:14
  • 1
    José postman он só это клиент HTTP, который помогает нам тестировать функциональность API REST, но в этом случае вопрос говорит, что está пробуя осуществлять это в C# – Pak Lei 13.06.2019, 21:27
  • 2
    @PakLeiChong то, что он комментирует здесь, правильно, но это не был бы должен быть ответ, должен бы быть одиноким комментарий – gbianchi♦ 13.06.2019, 21:36
  • 3
    Желанный в Стакк Оверфлов в españ ol! Это кажется повторно сожалейте о комментарии больше, чем ответ. С немного больше reputació n, ты сможешь комментировать в любой стороне. . Пожалуйста смотри CГіmo отвечать – gbianchi♦ 13.06.2019, 21:37
  • 4
    Пак Лэй Чун Эдайт ответ для того, чтобы он оказался тебе более полезным, mensiono это postman, потому что у друга, что postio проблема упоминает что названный dedsde об этом инструменте, если оно он функционирует, и если это такое, инструмент есть функция, чтобы производить код C#, который делал бы то, что она делает. – Jose Rodrigo Moreno Cordero 14.06.2019, 23:09

Возможно это может подавать тебя, как guГ - https://docs.microsoft.com/en-us/dotnet/framework/network-programming/how-to-send-data-using-t

http://ronaldrosiernet.azurewebsites.net/Blog/2013/12/07/posting_urlencoded_key_values_with_httpclient

string postData = "This is a test that posts this string to a Web server.";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);

ты здесь был бы должен посылать твои данные

.

-1
ответ дан 24.11.2019, 10:14
  • 1
    Желанный в StackOverflow в Españ ol, я приглашаю тебя к тому, чтобы ты прочитал Có mo спрашивать , так как ты нуждаешься contextualizar лучше и просто размещаешь ссылки с có я говорю и ты не даешь контекст этого, tambié n я приглашаю тебя к тому, чтобы ты сделал , Пробежавший и así ты зарабатываешь медаль! и изучи má s сайта – DaxTter77 04.09.2019, 20:37