使用邮递员代码在C#中尝试REST POST调用

使用邮递员代码在C#中尝试REST POST调用,c#,rest,api,token,postman,C#,Rest,Api,Token,Postman,我在工作中做一个辅助项目。我有非常基本的HTTP调用知识,所以如果我有任何问题,请原谅我 我使用Postman()创建JSON响应序列化以及调用头和参数。我正在尝试登录,然后调用methodgetSIM。当我通过邮递员应用程序发送请求时,呼叫成功。当我使用我的C#app尝试呼叫时,只有loginRequestAPICall返回响应(“确定”),但getSIM呼叫失败(“权限被拒绝”) 此API的文档可在以下位置获得: 我假设这是一个象征性的问题,但我没有足够的知识来解决这个问题 这是我的代码:

我在工作中做一个辅助项目。我有非常基本的HTTP调用知识,所以如果我有任何问题,请原谅我

我使用Postman()创建JSON响应序列化以及调用头和参数。我正在尝试登录,然后调用method
getSIM
。当我通过邮递员应用程序发送请求时,呼叫成功。当我使用我的C#app尝试呼叫时,只有
loginRequestAPICall
返回响应(“确定”),但
getSIM
呼叫失败(“权限被拒绝”)

此API的文档可在以下位置获得:

我假设这是一个象征性的问题,但我没有足够的知识来解决这个问题

这是我的代码:

class Program
{
    static void Main(string[] args)
    {
        var client = new RestClient("https://siam.eseye.com/Japi/Tigrillo");
        if (loginRequestAPICall(client))
        {
            Console.WriteLine("Login successful");
            getSIM(client);
        }
        else
        {
            Console.WriteLine("Login unsuccessful");
        }

        Console.ReadLine();
    }

    public static bool loginRequestAPICall(RestClient client)
    {
        var request = new RestRequest("/login/", Method.POST);

        //loginRequest.AddHeader("postman-token", "4e67ed4c-4130-4067-9539-d5ed6b6ad761");
        request.AddHeader("cache-control", "no-cache");
        request.AddHeader("content-type", "application/json");
        request.AddParameter("application/json", "{\r\n\"username\" : \"XXXXXXXXX\" ,\r\n\"password\" : \"XXXXXXXXX\" ,\r\n\"portfolioID\" : \"XXXXXXXXXX\"\r\n}", ParameterType.RequestBody);

        IRestResponse<LoginStatus> response = client.Execute<LoginStatus>(request);
        Console.WriteLine(response.Data.status.status);
        if (response.Data.status.status == "OK")
        {
            return true;
        }
        else
            return false;
    }

    public static void getSIM(RestClient client)
    {
        var request = new RestRequest("/getSIMs/", Method.POST);
        //request.AddHeader("postman-token", "4e67ed4c-4130-4067-9539-d5ed6b6ad761");
        request.AddHeader("cache-control", "no-cache");
        request.AddHeader("content-type", "application/json");
        request.AddParameter("application/json", "{\r\n\"numRecs\" : 1\r\n}", ParameterType.RequestBody);

        IRestResponse<RootObject> response = client.Execute<RootObject>(request);

        Console.WriteLine("Found {0} devices", response.Data.totRecs);

    }
}
public class LoginStatus
{
    public Status status { get; set; }
    public string cookie { get; set; }
    public string permissions { get; set; }
    public string canActivate { get; set; }
}

public class Status
{
    public string errorCode { get; set; }
    public string errorMessage { get; set; }
    public string status { get; set; }
}

public class Sim
{
    public string MSISDN { get; set; }
    public string friendlyName { get; set; }
    public string MEID { get; set; }
    public string ICCID { get; set; }
    public string IMSI { get; set; }
    public int DataUsage { get; set; }
    public string ipAddress { get; set; }
    public string group { get; set; }
    public string status { get; set; }
    public string alert { get; set; }
    public string controls { get; set; }
    public string dataMSISDN { get; set; }
    public string localMSISDN { get; set; }
    public string mappedMSISDN { get; set; }
}

public class RootObject
{
    public int totRecs { get; set; }
    public List<Sim> sims { get; set; }
    public Status status { get; set; }
}
类程序
{
静态void Main(字符串[]参数)
{
var client=新的RestClient(“https://siam.eseye.com/Japi/Tigrillo");
if(登录请求(客户))
{
Console.WriteLine(“登录成功”);
getSIM(客户端);
}
其他的
{
Console.WriteLine(“登录失败”);
}
Console.ReadLine();
}
公共静态bool loginRequestAPICall(RestClient客户端)
{
var request=new RestRequest(“/login/”,Method.POST);
//loginRequest.AddHeader(“邮递员令牌”,“4e67ed4c-4130-4067-9539-d5ed6b6ad761”);
AddHeader(“缓存控制”、“无缓存”);
AddHeader(“内容类型”、“应用程序/json”);
request.AddParameter(“应用程序/json”,“{\r\n\”用户名\“:\”XXXXXXXXX\”,\r\n\”密码\“:\”XXXXXXXXX\”,\r\n\“portfolioID\”:\”xxxxxxxxxxxxx\“\r\n}”,ParameterType.RequestBody);
IRestResponse response=client.Execute(请求);
Console.WriteLine(响应、数据、状态、状态);
如果(response.Data.status.status==“OK”)
{
返回true;
}
其他的
返回false;
}
公共静态void getSIM(RestClient客户端)
{
var request=new RestRequest(“/getSIMs/”,Method.POST);
//请求.AddHeader(“邮差令牌”,“4e67ed4c-4130-4067-9539-d5ed6b6ad761”);
AddHeader(“缓存控制”、“无缓存”);
AddHeader(“内容类型”、“应用程序/json”);
request.AddParameter(“application/json”,“numRecs\”:1\r\n}”,ParameterType.RequestBody);
IRestResponse response=client.Execute(请求);
WriteLine(“找到{0}个设备”,response.Data.totRecs);
}
}
公共类登录状态
{
公共状态状态{get;set;}
公共字符串cookie{get;set;}
公共字符串权限{get;set;}
公共字符串可以激活{get;set;}
}
公共阶级地位
{
公共字符串错误代码{get;set;}
公共字符串错误消息{get;set;}
公共字符串状态{get;set;}
}
公共类Sim卡
{
公共字符串MSISDN{get;set;}
公共字符串friendlyName{get;set;}
公共字符串MEID{get;set;}
公共字符串ICCID{get;set;}
公共字符串IMSI{get;set;}
公共int数据用法{get;set;}
公共字符串ipAddress{get;set;}
公共字符串组{get;set;}
公共字符串状态{get;set;}
公共字符串警报{get;set;}
公共字符串控件{get;set;}
公共字符串dataMSISDN{get;set;}
公共字符串localMSISDN{get;set;}
公共字符串mappedmisdn{get;set;}
}
公共类根对象
{
公共int totRecs{get;set;}
公共列表sims{get;set;}
公共状态状态{get;set;}
}

}

查看Fiddler/WireShark中的请求-响应,并告诉我区别。我假设邮递员在执行
getSIM
请求时传递了一个附加的“身份验证令牌”。顺便说一句,您的代码没有遵循标准的C#命名约定。还要在getSIM请求中添加身份验证(标头)。如果没有更多信息,就无法确切地告诉您原因。可能是登录响应包含postman持有的头令牌(或类似令牌),因此对getSIM的调用被传递,这表明它已通过身份验证。您可能需要在C#中执行同样的操作。检查请求-响应流以检查响应,然后检查第二个请求的C#中是否缺少任何标题。@Aron,请澄清命名约定不符合标准的地方好吗?正如我所说,我不是开发人员,所以我不确定。@AnilKumar-当我添加:
request.AddParameter(“应用程序/json”),“{\r\n\“用户名\:\“XXXXXX\”,\r\n\“密码\:“XXXXXXX\”,\r\n\“portfolioID\:“XXXXXX\”\r\n}”,ParameterType.RequestBody)
getSIM
呼叫,我收到:
无效参数-用户名