Вызов API POST из Консольного приложения со сложными параметрами - PullRequest
0 голосов
/ 03 мая 2020

Как вызвать API для сложных данных из консольного приложения. Я хочу сделать операцию с базой данных в API и передать следующую структуру. Неправильно передаются параметры.

API.

  public class Student
  {       


    public string commandText { get; set; }
    public CommandType commandType { get; set; }
    public IDbDataParameter[] parameters
    {
        get; set;

    }
}

public class ValuesController : ApiController
 {
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
     [Route("getvendor"), HttpPost]
    public void Post([FromBody]string value)
    {

    }
    public void Post(Student value)
    {

    }

Консольное приложение

    static void Main(string[] args)
    {
        CallWebAPIAsync().Wait();
    }

    private static IDbDataParameter CreateParameter(DbType parameterType, int size, string name, ParameterDirection direction)
    {
        return new SqlParameter
        {
            DbType = parameterType,
            Size = size,
            ParameterName = name,
            Direction = direction
        };
    }

    public static IDbDataParameter[] CreateParams( )
    {
        IDbDataParameter[] param = new[]
        {
     CreateParameter(DbType.Int32, 50, "@AutoID", ParameterDirection.ReturnValue),
     CreateParameter(DbType.String, 50, "@OperatorName", ParameterDirection.InputOutput),
     CreateParameter(DbType.String, 50, "@Date", ParameterDirection.InputOutput),
     CreateParameter(DbType.String, 50, "@StartDate", ParameterDirection.Input),
     CreateParameter(DbType.String, 50, "@EndDate", ParameterDirection.Input),
    };

        return param;
    }
   public static async Task CallWebAPIAsync()
     {
        // var student = "{'Id':'1','Name':'Steve'}";
        var student = new Student() { commandText = "test", commandType = CommandType.StoredProcedure, parameters = CreateParams() };




        HttpClient client = new HttpClient();
        var output=JsonConvert.SerializeObject(student);
        client.BaseAddress = new Uri("http://localhost:58847/");

        var response = await client.PostAsync("api/values", new StringContent(output, Encoding.UTF8, "application/json"));
        if (response != null)
        {
            Console.WriteLine(response.ToString());
        }
    }

Звонок происходит, но IDbDataParameter не передается. Передаются только CommandText и Command Type.

...