Abo*_*udi 1 c# asp.net-web-api
我如何使用多个简单类型作为参数 PostAsync(),我有下面的动作控制器:
[HttpPost]
[Route("users/verifyLoginCredentials/{username}/{password}")]
public IHttpActionResult VerifyLoginCredentials([FromUri]string username, string password)
{
//Do Stuff......
return Ok("Login Successful");
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试从 .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;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试了多种方法,并且最近阅读了很多 在这里。
我知道处理复杂类型比处理简单类型更容易,并且默认情况下复杂类型被编码到请求正文/内容中,而简单类型被编码到 URI 中。
我试图通过发送使用编码的键/值对来发布数据 FormUrlEncodedContent(string)通过发送 JsonStringContent(),我尝试过使用单个和多个参数,但我知道现在限制仅适用于复杂类型。
我已经阅读了许多 MSDN 帖子和教程,也许我遗漏了一条重要信息。
上面的控制器操作确实会被执行,但两个参数的字符串值为“{username}”和“{password}”
当你写
[Route("users/verifyLoginCredentials/{username}/{password}")]
Run Code Online (Sandbox Code Playgroud)
您说的是“按照指定的顺序,从 Uri 匹配用户名和密码参数”,因此您通过 POST 正文发送的任何内容都将被忽略。
您明确地将 {username} 和 {password} 作为参数传递:
var result = await client.PostAsync("users/verifyLoginCredentials/{username}/{password}", content);
Run Code Online (Sandbox Code Playgroud)
你应该这样做:
var message = new HttpRequestMessage(HttpMethod.Post, "users/verifyLoginCredentials/username/test123");
var result = await client.SendAsync(message);
string resultContent = await result.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)
如果要将数据作为正文而不是 URL 的一部分发布,请使用以下命令:
[Route("users/VerifyLoginCredentials")]
public IHttpActionResult VerifyLoginCredentials(string username, string password)
var value = new Dictionary<string, string>
{
{ "username", "yourUsername" },
{ "passwird", "test123" }
};
var content = new FormUrlEncodedContent(value);
var result = await client.PostAsync("users/verifyLoginCredentials/", content);
string resultContent = await result.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7506 次 |
| 最近记录: |