Как вызвать 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.