Follow 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 link https://selador.homologacao.portalseloam.com.br
does not have a verified certificate, so it is not considered safe, so an exception will occur when executing this code.
However it is possible to make a technical arrangement so that the certificate is not validated, however 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"
}
then before working on this object, I advise you to deserialize it. for such 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 the 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
containing a json
.
Then you can instantiate one StringContent
passing the string with json and informing 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();
}
Toby, I tried to run the code you gave me, but you’re making an error on this line here: var request = await client.Postasync("/auth", content); {"The underlying connection was closed: Could not establish trust for secure SSL/TLS channel."}
– Thiago Martins
@Thiagomartins after performing some corrections in the names of the variables, I tried to perform the Request, but the same was recursed because the certificate used on the site is invalid, so I had to make a gambiara to be able to consume this service.
– Tobias Mesquita
@Thiagomartins made an edition with several details.
– Tobias Mesquita
thank you very much, exactly what I needed. Very well explained, congratulations.
– Thiago Martins
how do I reference the library of this [Datacontract]?
– Thiago Martins
@Thiagomartins, System.Runtime.Serialization
– Tobias Mesquita
even referencing the System.Runtime.Serialization library I can’t find the [Datacontract], it’s like it’s not referenced.
– Thiago Martins
@Thiagomartins. you need to include the reference in the project and the using in the file.
– Tobias Mesquita
worked out, I was faltering, I was forgetting to reference the dll in the project. Thanks again.
– Thiago Martins
how do I fill a JSON body using Httpclient?
– Thiago Martins
@Tobymosby, thank you very much brother, it worked.
– Thiago Martins
@Tobymosby, I added one more question to my question, if you can help me with that...
– Thiago Martins
@Thiagomartins, if you have new questions, please create new questions, for example, when asking how to submit a JSON, you changed the scope of the question, this is not interesting to Stackoverflow, in this case the ideal would be to open a new question with the new question.
– Tobias Mesquita