Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在xamarin库/sdk中使用refit调用RESTAPI_C#_Xamarin_Xamarin.forms_Xamarin.android_Refit - Fatal编程技术网

C# 如何在xamarin库/sdk中使用refit调用RESTAPI

C# 如何在xamarin库/sdk中使用refit调用RESTAPI,c#,xamarin,xamarin.forms,xamarin.android,refit,C#,Xamarin,Xamarin.forms,Xamarin.android,Refit,我正在构建一个xamarin库/插件,该插件应该使用refit调用API,但当我调用API时,我得到以下错误: System.Net.Http.HttpRequestException: Connection refused ---> System.Net.Sockets.SocketException: Connection refused System.Net.Http.HttpRequestException: Connection refused ---> System.Ne

我正在构建一个xamarin库/插件,该插件应该使用refit调用API,但当我调用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 
System.Net.Http.HttpRequestException:拒绝连接---->System.Net.Sockets.SocketException:拒绝连接System.Net.Http.HttpRequestException:拒绝连接---->System.Net.Sockets.SocketException:拒绝连接
位于:0中的System.Net.Http.ConnectHelper.ConnectAsync(System.String主机、System.Int32端口、System.Threading.CancellationToken CancellationToken)[0x00110]
---内部异常堆栈跟踪的结束---
在System.Net.Http.ConnectHelper.ConnectAsync(System.String主机、System.Int32端口、System.Threading.CancellationToken CancellationToken)[0x001ac]中,位于:0
在System.Threading.Tasks.ValueTask`1[TResult].get_Result()[0x0001b]中:0
在:0中的System.Net.Http.HttpConnectionPool.CreateConnectionAsync(System.Net.Http.HttpRequestMessage请求,System.Threading.CancellationToken CancellationToken)[0x00134]处
在System.Threading.Tasks.ValueTask`1[TResult].get_Result()[0x0001b]中:0
我的Sdk代码: 接口

namespace Plugin.MySDK
{
public interface ISDK
    {
        [Post("/cart")]
        Task<Events> postCart([Body] Events events);
    }
}
namespace Plugin.MySDK
{
公共接口ISDK
{
[邮寄(“/购物车”)]
任务启动后([正文]事件);
}
}
我在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);
            }
        }
    }
}
namespace Plugin.MySDK
{
公共类MySDK
{
静态活动电流活动;
私有静态字符串_ms=“abcd”;
私有静态字符串_appName;
私有静态字符串BASE_URL=”http://b80502ca.ngrok.io";
公共TerraSDK()
{
}
公共静态无效初始化(活动,
字符串应用程序)
{
当前活动=活动;
_appName=app;
}
公共静态异步void Cart()
{
尝试
{
var apiResponse=RestService.For(基本URL);
事件=新事件();
events.ms=_-ms;
events.app=\u appName;
事件ev=等待apiResponse.启动后(事件);
控制台写入线(“响应:+ev);
}
捕获(例外情况除外)
{
控制台写入线(“购物车:+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);
        }
    }
}
namespace TestSdk.Droid
{
公共类MainActivity:全局::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
按钮车;
私有静态字符串\u appName=“TestSdk”;
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
this.SetContentView(Resource.Layout.Main);
Xamarin.Essentials.Platform.Init(这个,savedInstanceState);
全局::Xamarin.Forms.Forms.Init(这个,savedInstanceState);
加载应用程序(新应用程序());
cart=findviewbyd(Resource.Id.cart);
初始化(这个,_appName);
cart.Click+=此消息;
}
公共无效消息(对象发送方,事件参数e)
{
MySDK.Cart();
}
public override void OnRequestPermissionsResult(int-requestCode,string[]permissions,[GeneratedEnum]Android.Content.PM.Permission[]grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(请求代码、权限、GrantResult);
base.OnRequestPermissionsResult(请求代码、权限、GrantResult);
}
}
}

但是,当我尝试从一个应用程序以同样的方式调用API时,一切都按预期进行。如果我做错了什么,请帮助并纠正我,我是xamarin的新手

你在Android清单中启用了internet权限吗?是的,我在应用程序中调用了相同的api,它工作正常,但通过SDK调用时不起作用。这应该是防火墙的问题。你能用Android设备和模拟器在iOS设备和模拟器上复制这个问题吗?我能在Android设备上复制它。@Saamer