Как вызвать rest API с помощью refit в библиотеке xamarin / sdk - PullRequest
0 голосов
/ 08 ноября 2019

Я создаю библиотеку / плагин xamarin, и плагин должен вызывать API с помощью refit, но когда я вызываю API, я получаю следующую ошибку:

System.Net.Http.HttpRequestException: Connection refused ---> System.Net.Sockets.SocketException: Connection refused System.Net.Http.HttpRequestException: Connection refused ---> System.Net.Sockets.SocketException: Connection refused
  at System.Net.Http.ConnectHelper.ConnectAsync (System.String host, System.Int32 port, System.Threading.CancellationToken cancellationToken) [0x00110] in <99e6bf9d99304315ba19eacc7497e256>:0 
   --- End of inner exception stack trace ---
  at System.Net.Http.ConnectHelper.ConnectAsync (System.String host, System.Int32 port, System.Threading.CancellationToken cancellationToken) [0x001ac] in <99e6bf9d99304315ba19eacc7497e256>:0 
  at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in <6de48997d0c0445dbea8d4d83492d8c6>:0 
  at System.Net.Http.HttpConnectionPool.CreateConnectionAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x00134] in <99e6bf9d99304315ba19eacc7497e256>:0 
  at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in <6de48997d0c0445dbea8d4d83492d8c6>:0 

Мой код Sdk: Интерфейс

namespace Plugin.MySDK
{
public interface ISDK
    {
        [Post("/cart")]
        Task<Events> postCart([Body] Events events);
    }
}

MySDK.android.cs, где я делаю вызов API

namespace Plugin.MySDK
{
    public class MySDK 
    {
        static Activity currentActivity;
        private static string _ms = "abcd";
        private static string _appName;

        private static string BASE_URL = "http://b80502ca.ngrok.io";

        public TerraSDK()
        {
        }
        public static void initialize(Activity activity,
            string app)
        {

            currentActivity = activity;
            _appName = app;
        }
        public static async void Cart()
        {
            try
            {
                var apiResponse = RestService.For<ISDK>(BASE_URL);

                Events events = new Events();
                events.ms = _ms;
                events.app = _appName;
                Events ev = await apiResponse.postCart(events);
                Console.WriteLine("Response: " + ev);  

            }
            catch (Exception ex)
            {
                Console.WriteLine("Cart:" + ex);
            }
        }
    }
}

Использование SDK:

namespace TestSdk.Droid
{
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        Button cart;
        private static string _appName = "TestSdk";
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            this.SetContentView(Resource.Layout.Main);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
            cart = FindViewById<Button>(Resource.Id.cart);
            MySDK.initialize(this,_appName);
            cart.Click += this.Message;
        }
        public void Message(object sender, EventArgs e)
        {
           MySDK.Cart();
        }


        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
}

Но когда я попытался вызвать APIтаким же образом из приложения все работает как положено. Пожалуйста, помогите и поправьте меня, если я делаю что-то не так, я новичок в xamarin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...