Как мне использовать PostAsync () с несколькими простыми типами в качестве параметров, у меня ниже приведен контроллер действий:
[HttpPost]
[Route("users/verifyLoginCredentials/{username}/{password}")]
public IHttpActionResult VerifyLoginCredentials([FromUri]string username, string password)
{
//Do Stuff......
return Ok("Login Successful");
}
Я пытаюсь вызвать его из клиентского приложения .Net Framerwork 4.5, как показано ниже:
static async Task<Uri> CreateProductAsync(string username, string password)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(uri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var value = new Dictionary<string, string>
{
{ "username", "test123" }
};
var content = new FormUrlEncodedContent(value);
var result = await client.PostAsync("users/verifyLoginCredentials/{username}/{password}", content);
string resultContent = await result.Content.ReadAsStringAsync();
result.EnsureSuccessStatusCode();
// return URI of the created resource.
return result.Headers.Location;
}
До сих пор я пробовал несколько способов и много читал, в последнее время здесь .
Я понимаю, что со сложными типами легче иметь делочем для работы с простыми типами, и что по умолчанию сложные типы кодируются в теле / содержимом запроса, в то время как простые типы кодируются в URI.
Я попытался опубликовать данные, отправив закодированные пары ключ / значениеиспользуя FormUrlEncodedContent(string)
, отправив Json через StringContent()
, я пробовал использовать как одиночные, так и множественные параметры, но я понимаю, что сейчас это ограничение касается только сложных типов.
Я прочитал много публикаций и руководств по MSDN, может быть, яя пропускаю важную информацию.
Действие контроллера, приведенное выше, действительно выполняется, но оба параметра имеют строковое значение"{имя пользователя}" и "{пароль}"