Following is an example using the System.Net .Http.HttpClient :
static void Main(string[] args)
{
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
var response = Program.Call().Result;
}
static async Task<string> Call()
{
var parametros = new Dictionary<string, string>();
parametros.Add("username", "004143");
parametros.Add("password", "fpf@1212");
parametros.Add("client_id", "selador");
parametros.Add("grant_type", "password");
using (var cliente = new HttpClient())
{
cliente.BaseAddress = new Uri("https://selador.homologacao.portalseloam.com.br");
var content = new FormUrlEncodedContent(parametros);
var request = await cliente.PostAsync("/auth", content);
return await request.Content.ReadAsStringAsync();
}
}
Remembering that this is the recommended way to make Web requests from .Net 4.5
Note that the https://selador.homologacao.portalseloam.com.br
link does not have a verified certificate, so it is not considered secure, so an exception will occur when executing this code.
However, it is possible to make a technical arrangement so that certificate is not validated, but I do not advise you to ignore this verification in the production environment;
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
The above code is returning the following string.:
{
"access_token":"eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI1ZDY5MmMwNC02MDc2LTRlNDEtYjRlNi01NjUwMTRmNWYzODEiLCJleHAiOjE0NzA2NzMwNTUsIm5iZiI6MCwiaWF0IjoxNDcwNjcyNDU1LCJpc3MiOiJodHRwOi8va2V5Y2xvYWstcG9ydGFsOjgwODAvYXV0aC9yZWFsbXMvc2VsYWRvci1hcGkiLCJhdWQiOiJzZWxhZG9yIiwic3ViIjoiZDgyMjM0NDAtODdhOC00MDNkLTkyNTYtZmQ5NTFiODY1MDJlIiwiYXpwIjoic2VsYWRvciIsInNlc3Npb25fc3RhdGUiOiJiZjMzNDhlYy0zNGQ4LTQzNGItODE0OC1mZDhjM2NkYTQ3ZTAiLCJjbGllbnRfc2Vzc2lvbiI6ImQxODExZjQzLWE1ZmQtNGE1MC1hMzdjLWY3YjY1OThiYzE1NyIsImFsbG93ZWQtb3JpZ2lucyI6W10sInJlc291cmNlX2FjY2VzcyI6eyJzZWxhZG9yIjp7InJvbGVzIjpbImNhcnRvcmlvIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50Iiwidmlldy1wcm9maWxlIl19fSwibmFtZSI6IkNhcnTDs3JpbyBNaXJhbmRhIFNhbGVzICIsInByZWZlcnJlZF91c2VybmFtZSI6IjAwNDE0MyIsImdpdmVuX25hbWUiOiJDYXJ0w7NyaW8gTWlyYW5kYSBTYWxlcyJ9.e7UnBuT0ZXew9ZQDIpZURMor_TYAa2Ewhqu6VOrFzwYg0KHKRrMKPReJdjVPEdM-WR_UatG_sWa7BVLuiED02lHDl1pKzjN6F2zHJYC-85kgIkb4KMBKz9qfYkTOn50scQMWxV_4_0YONlu56ZBBiHzq1ZdJnrl4L-9MkELaDr1QoGwBRHYDlOBeQfMpsECGa-x4AaqqFRREAdzx-N-nxIkOHY8v_kBBu_EkvgP9Bflp_olHNvucMP-yLSkuQCGDDwDz6sd9Oe-ZNr2i_EEubVzibvQh4LvIyJffq8uGtlSHJqS0mExU0jLBa2m5xyMo9FSgTlbZ2mxCihfWLGO0-A",
"expires_in":600,
"refresh_expires_in":600,
"refresh_token":"eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJlZWQ4MWIwMy05NDEwLTQ3MjUtYjE0ZS1lOWMyNWU2M2FjNjciLCJleHAiOjE0NzA2NzMwNTUsIm5iZiI6MCwiaWF0IjoxNDcwNjcyNDU1LCJpc3MiOiJodHRwOi8va2V5Y2xvYWstcG9ydGFsOjgwODAvYXV0aC9yZWFsbXMvc2VsYWRvci1hcGkiLCJzdWIiOiJkODIyMzQ0MC04N2E4LTQwM2QtOTI1Ni1mZDk1MWI4NjUwMmUiLCJ0eXAiOiJSRUZSRVNIIiwiYXpwIjoic2VsYWRvciIsInNlc3Npb25fc3RhdGUiOiJiZjMzNDhlYy0zNGQ4LTQzNGItODE0OC1mZDhjM2NkYTQ3ZTAiLCJjbGllbnRfc2Vzc2lvbiI6ImQxODExZjQzLWE1ZmQtNGE1MC1hMzdjLWY3YjY1OThiYzE1NyIsInJlc291cmNlX2FjY2VzcyI6eyJzZWxhZG9yIjp7InJvbGVzIjpbImNhcnRvcmlvIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50Iiwidmlldy1wcm9maWxlIl19fX0.myAKI_WQBt-8dOcfCjh98J0KLqNq-s3qk87e0lyQaUeHRxcQpj3bUb6pvlXDn35NoNKdufxG5_MSby5eqKfoLIsRz1BTMluYkk5EVaaQ_TTZvpPMyG5f9Ab5BfG5fM1w3mtiZM3jh4EOh1WVixCNB3VO0zNpHpk-H6yxuqss3YmZk98OPhI7oV1RONsA2EIFbLX2hIbND2CVBZOi0G1f3skzhJpxaRg0hcvN0cifvtQ56D4y0DPc8IMbYoJLK3XYTCxhTeYtLwAw3rlrsDs9io9_ZIwQQMhrrFaw5HqwcH9-4jPUuQUQ6oaO50syjJ-SLITxgQkeanuNX7S433TKcw",
"token_type":"bearer",
"id_token":"eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiIwYWRiZGFlYS1jYzNjLTQ0MTktODE0Yi03MGYyM2Q5OGNmMmUiLCJleHAiOjE0NzA2NzMwNTUsIm5iZiI6MCwiaWF0IjoxNDcwNjcyNDU1LCJpc3MiOiJodHRwOi8va2V5Y2xvYWstcG9ydGFsOjgwODAvYXV0aC9yZWFsbXMvc2VsYWRvci1hcGkiLCJhdWQiOiJzZWxhZG9yIiwic3ViIjoiZDgyMjM0NDAtODdhOC00MDNkLTkyNTYtZmQ5NTFiODY1MDJlIiwiYXpwIjoic2VsYWRvciIsInNlc3Npb25fc3RhdGUiOiJiZjMzNDhlYy0zNGQ4LTQzNGItODE0OC1mZDhjM2NkYTQ3ZTAiLCJuYW1lIjoiQ2FydMOzcmlvIE1pcmFuZGEgU2FsZXMgIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiMDA0MTQzIiwiZ2l2ZW5fbmFtZSI6IkNhcnTDs3JpbyBNaXJhbmRhIFNhbGVzIn0.KlU4e66Na1HLxik_aFQLoY_MMkatbFAnet6yzi2aSSRopQoJF14H9kv6mU-ziLabmPBasiHa-VEkwAwOO-SelhTDAAv6mguO0LMfy-HAuhKMDVcRpuoHsF0jwklEOUC2KeC6T2fdI7su8Sn5v5aRuj1bSxwOD9VluY21_zYGQ34E0CJKwudzLDkLM6CF-xoC5Y69TORdVPzztXyUgafQ_pExVnM--0TLB8jUL2YXQaOZk7oAB0tAiDo7rUqKyERpI4sjtV-GjutcC3vJWH-hHiIfJFxjik5HutuH245uQ5lp-N-dfUkVvp1A-bDTnB4LKgmCMzXze2B63H4se3xZZg",
"not-before-policy":1447334813,
"session-state":"bf3348ec-34d8-434b-8148-fd8c3cda47e0"
}
So before working on this object, I advise you to deserialize it. to do so define a class with the following structure.
[DataContract]
public class DadosAcesso
{
[DataMember(Name = "access_token")]
public string AccessToken { get; set; }
[DataMember(Name = "refresh_expires_in")]
public int RefreshExpiresIn { get; set; }
[DataMember(Name = "refresh_token")]
public int RefreshToken { get; set; }
[DataMember(Name = "token_type")]
public string TokenType { get; set; }
[DataMember(Name = "id_token")]
public string IdToken { get; set; }
[DataMember(Name = "not-before-policy")]
public int NotBeforePolicy { get; set; }
[DataMember(Name = "session-state")]
public Guid SessionState { get; set; }
}
Then use Json.NET :
var response = Program.Call().Result;
var dadosAcesso = JsonConvert.DeserializeObject<DadosAcesso>(response);
EDIT - Sending a JSON
The first thing to do is serializar
your object, done this you will have a string
that contains a json
.
Then you can instantiate a StringContent
by passing the string with json and giving mime-type application/json
.
var objeto = new MyObjeto { MyProp1 = "For", MyProp2 = "Bar" };
var json = await Task.Run(() => {
JsonConvert.SerializeObject(objeto);
});
using (var cliente = new HttpClient())
{
cliente.BaseAddress = new Uri("https://selador.homologacao.portalseloam.com.br");
var content = new StringContent(json , Encoding.UTF8, "application/json");
var request = await cliente.PostAsync("/auth", content);
return await request.Content.ReadAsStringAsync();
}