Ler Serviços Rest Android Xamarim .NEt

alfinete

Power Member
boas tardes

estou com um problema a executar um serviço rest publicado na minha maquina local no IIS atraves de android Xamarim .net .

este rest corre bem atraves de post man na minha maquina local.

Url - http://Xpto.com:90/api/TaskOnBiz/Int/Post/TesteInterno

erros ao fim do post

não sei se isto ocorre de o serviço não executar numa rede externa

ou é alguma coisa mal nos métodos que o executam

Agradecia uma ajuda para esta qestão

Código:
public  string Callrest2()
        {
            var request = HttpWebRequest.Create("http://Xpto.com:90/api/TaskOnBiz/Int/Post/TesteInterno");
            string User = "Xpto";
            string pass = "Xpto";
            string value =  string.Empty ;
            HttpWebResponse Resp = null;
            string Error = string.Empty;
        
            try
            {
                SetBasicAuthHeader(request, User, pass);



                string postData = "{\"Entidade\":{\"CodPostal\":\"1245-125\",\"DescrPostal\":\"Portalegre\",\"EntidadeId\":\"1\",\"Localidade\":\"Portalegre\",\"Morada\":\"Rua 1º de Maio\",\"Mif\":\"123564789\",\"Nome\":\"José ALfredo ribeiro\"}}";
                request.ContentType =  "application/json";//"application/x-www-form-urlencoded"
                request.Method = WebRequestMethods.Http.Post;

           
                request.ContentLength = Encoding.UTF8.GetByteCount(postData);

                Stream dataStream = request.GetRequestStream();
                dataStream.Write(Encoding.UTF8.GetBytes(postData), 0, Encoding.UTF8.GetByteCount(postData));
                dataStream.Close();


                using (HttpWebResponse response =  request.GetResponse() as HttpWebResponse)
                {
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        Error = string.Format("ERROR: Server status code: {0}", response.StatusCode);
                    }
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        var content = reader.ReadToEnd();
                        value = content.ToString();
                        if (string.IsNullOrWhiteSpace(content))
                        {
                            Error = string.Format("ERROR: Empty response.");
                        }
                        else
                        {
                            Error = string.Format("Response: {0}", content);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Error = ex.Message;
            }
            return value;
        }



        public void SetBasicAuthHeader(WebRequest request, String userName, String userPassword)
        {
            string authInfo = userName + ":" + userPassword;
            authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
            request.Headers["Authorization"] = "Basic " + authInfo;
        }

        private async Task<string>  Callrest (){

            HttpResponseMessage response = null;
            string Url = "http://Xpto.com:90/api/TaskOnBiz/Int/Post/TesteInterno";//IISLOCAL
            string Json = "{\"Entidade\":{\"CodPostal\":\"1245-125\",\"DescrPostal\":\"Portalegre\",\"EntidadeId\":\"1\",\"Localidade\":\"Portalegre\",\"Morada\":\"Rua 1º de Maio\",\"Mif\":\"123564789\",\"Nome\":\"José ALfredo ribeiro\"}}";
            //  RootObject RootData = JsonConvert.DeserializeObject<RootObject>(Json);
            string User = "Xpto";
            string pass = "Xpto";
            string value = string.Empty;
            try
            {
                NetworkCredential MyCred = new NetworkCredential
                {
                    UserName = User
                    ,Password = pass
                };
                var handler = new HttpClientHandler { Credentials = MyCred };

                using (var client = new HttpClient(handler))
                {
                    // cria o conteudo da requisição e define o tipo Json
                    var content = new StringContent(Json, Encoding.UTF8, "application/json");
              

                    // envia a requisição POST
                    response = await client.PostAsync(Url, content);

                    // Se ocorrer um erro lança uma exceção
                    //  result.EnsureSuccessStatusCode();

                    // processa a resposta
                    if (response.IsSuccessStatusCode)
                    {
                        value = await response.Content.ReadAsStringAsync();
                    }

                  //  var task = Task.Run(async () => await result.Content.ReadAsStringAsync());
                }

            
            }
            catch (Exception ex)
            {
                string err = ex.Message;
            }

            return value;
        }


Execução dos metodos acima descritos
__________________________________________________________________________________________________

Código:
 //TesteChamaREst
          //  Task<string> value = Task.Run(async () => await Callrest());

            string Resp =  Callrest2();


Erro da execução do Callrest
___________________________________________________________________________________________


Código:
{StatusCode: 404, ReasonPhrase: 'Not Found',
Version: 1.1, Content: System.Net.Http.StreamContent,
 Headers:{Cache-Control: privateServer: Microsoft-IIS/8.5Set-Cookie:
 ASP.NET_SessionId=pe0z2t5xogix2o2quez2d0xb;
 path=/; secure; HttpOnly; SameSite=LaxX-AspNet-Version: 4.0.30319X-Powered-By: ASP.NETX-Frame-Options:
 SAMEORIGINDate: Mon, 23 Aug 2021 10:41:29 GMTX-CDN: ImpervaTransfer-Encoding:
 chunkedX-Iinfo: 14-98150162-97929519
sNNN RT(1629715285437 3897) q(0 0 0 -1) r(1 1) U11Content-Type: text/html; charset=utf-8}}




Erro da execução do Callrest2
___________________________________________________________________________________________


Código:
The remote server returned an error: (404) Not Found.
 
Última edição:
bom dias
entretanto consegui resolver a situação


classe de dados
______________________________________________________
Código:
 public class TmRest
    {

       /// <summary>
       /// Url Referente ao caminho do metodo referente ao Rest Service
       /// </summary>
       public string UrlFunction { get; set; }
       /// <summary>
       /// Json Body Passado no pedido 
       /// </summary>
       public string JsonBody { get; set; }
       /// <summary>
       /// Tipo e Request POST,GET
       /// </summary>
       public string RequestType { get; set; }
        /// <summary>
        /// Tipo de content  quase sempre  'application/json'
        /// </summary>
        public string ContentType { get; set; }
    }

Chamada
______________________________________________________

Código:
  TmRest DadosRest = new TmRest
            {
                ContentType  = "application/json"
                ,JsonBody    = "{\"Entidade\":{\"CodPostal\":\"1245-125\",\"DescrPostal\":\"Portalegre\",\"EntidadeId\":\"1\",\"Localidade\":\"Portalegre\",\"Morada\":\"Rua 1º de Maio\",\"Mif\":\"123564789\",\"Nome\":\"José ALfredo ribeiro\"}}"
                ,RequestType = "POST"
                ,UrlFunction = "/api/TaskOnBiz/Int/Post/TesteInterno"
            };
            string Rest3 = ReadRest3(DadosRest);

ContentType - Tipod e content Do request
JsonBody - Jason Referente ao body enviado no request
RequestType - Tipo de request (no meu caso so testei para o Post ) , não sei se para get funciona
UrlFunction - Parte do Url Referente a chamada da função que queremos chamar


Ler Rest Service
_____________________________________________________
Código:
 private string ReadRest(TmRest DadosRest)
        {
            string s = string.Empty;
            string UrlBase = "http://127.0.0.1:92" + DadosRest.UrlFunction;
            string postData = DadosRest.JsonBody;
         
            string User = "android";
            string pass = "android";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(UrlBase);

            string credentials = Convert.ToBase64String(
            Encoding.ASCII.GetBytes(User + ":" + pass));
            request.Headers[HttpRequestHeader.Authorization] = string.Format(
                "Basic {0}", credentials);
         
            request.Method = DadosRest.RequestType.ToUpper() == "POST" ?  WebRequestMethods.Http.Post : WebRequestMethods.Http.Get;
            request.AllowAutoRedirect = true;
            request.Proxy = null;
            request.ContentType = DadosRest.ContentType;// "application/json";
            try
            {

                request.ContentLength = Encoding.UTF8.GetByteCount(postData);

                Stream dataStream = request.GetRequestStream();
                dataStream.Write(Encoding.UTF8.GetBytes(postData), 0, Encoding.UTF8.GetByteCount(postData));
                dataStream.Close();

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream();
                StreamReader streamreader = new StreamReader(stream);
                s = streamreader.ReadToEnd();
            }
            catch (Exception ex)
            {

                string err = ex.Message;
            }
            return s;
        }




[\code]

mesmo não tendo ajuda de vossa parte , fico muito agradecido por todos os que leram este post
 
Back
Topo