如何使用控制台应用程序从api执行方法?

时间:2016-06-23 15:33:56

标签: c# asp.net-web-api console-application

我想创建一个控制台应用程序,它可以从API执行我的一些方法,以便人们更容易理解这些方法的工作方式。获取用户输入,然后显示输出数据的最佳方法是什么。

这是我到目前为止所做的:

    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction().replace(content_frame, fragment).commit();

控制台:

public class SampleProgram
{
    private readonly IRestClient _client;
    private const string vTruckUrl = "api/trucktype";

    public SampleProgram(string serviceUrl)
    {
        _client = new RestClient(serviceUrl);
    }

    public List<TruckType> GetVisionTruckType(string orderItemNumber) 
    //TruckType is a simple model containting two strings.
    {
        var request = new RestRequest(vTruckUrl, Method.GET)
        {
            RequestFormat = DataFormat.Json
        };

        request.AddParameter("orderItemNumber", orderItemNumber);

        var response = _client.Execute<List<VisionTruckType>>(request);
        if (response.StatusCode == System.Net.HttpStatusCode.OK)
            return response.Data;

        throw new Exception("The truck type and job name could not be queried.");
    }
}

我的程序没有输出我想要的列表。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这是不正确的:

var type = _service.GetVisionTruckType(num);
Console.WriteLine(type.ToString());

默认情况下,ToString()将在引用类型上返回类型本身的名称。 (毕竟,系统如何知道你所期望的那个任意类该类的字符串表示是什么?)

您需要从type对象打印要打印的内容。 (这应该被称为types,因为它是一个集合,顺便说一句。错误的命名会增加您遇到的困惑。)例如:

var type = _service.GetVisionTruckType(num);
foreach (var obj in type)
    Console.WriteLine(obj.SomeProperty);

这会在该集合中的每个元素上打印SomeProperty的值。

无论您想要打印什么,都取决于您。关键是C#只是通过调用ToString()来了解你想要的东西,你必须明确告诉它。

相反,您可以在您控制的任何课程上覆盖 ToString()

public override string ToString()
{
    // build and return what you want a string representation of this object to be
}

这将允许您在该类型的对象上一致地调用ToString()并获得您期望的字符串表示。

答案 1 :(得分:1)

您需要迭代方法返回的列表项。

switch (methodNumber)
{

    case "1":
        Console.WriteLine("Please enter a valid order item number: ");
        string num = Console.ReadLine();
        List<TruckType> type = _service.GetVisionTruckType(num);
        foreach (var item in type )
        {   // this will only work if you override the ToString() 
            // method in the class TruckType 
            Console.WriteLine(item.ToString());
        }
        break;
}

如果您只想打印TruckType的某些属性,则需要直接访问它们:

foreach (var item in type )
{
    Console.WriteLine(item.SomeProperty.ToString());
}

Here有助于理解如何覆盖ToString()。如果要显示有关对象的所有信息,实际上很高兴。