使用 HTTPClient.PostAsync 调用 ASP.Net RESTful POST 控制器 API 方法
Calling an ASP.Net RESTful POST controller API method with HTTPClient.PostAsync
一位同事编写了一个 Azure 移动服务API,其中包括以下控制器方法:
public class SegmentationController : ApiController
{
// [...]
// POST api/<controller>/id
public async Task<string> Post(string id)
{
// [...]
我正在尝试从 Windows 通用应用程序调用它。对 GET 方法的调用没有问题,但我无法调用 POST 方法。这是我尝试过的:
response = await client.PostAsync("api/segmentation/", new StringContent(item.Id));
// 405 Method Not Allowed
response = await client.PostAsync("api/segmentation/" + item.Id, new StringContent(""));
// 500 Internal Server Error
response = await client.PostAsync("api/segmentation/", new StringContent("id=" + item.Id));
// 405 Method Not Allowed
response = await client.PostAsync("api/segmentation/", new StringContent("{\"id\":" + item.Id + "}"));
// 405 Method Not Allowed
(N.B。Marc's answer 中使用的 System.Collections.Specialized.NameValueCollection
在 WinRT / Windows Universal 上不可用。)
有可能我的第二次调用是正确的,错误在服务器端代码中;我们正在探索这种可能性。
对 ASP.Net RESTful API 方法进行 POST 调用的正确方法是什么,该方法需要一个名为 "id" 类型的参数 string
?
你的参数有问题。您有两个选择:
- 使用查询参数而不是正文。例如api/segmentation?id=abc
- 将
[FromBody]
属性添加到您的参数。例如public async Task<string> Post([FromBody]string id)
现在你的参数是从正文中读取的。默认情况下,仅从正文中读取复杂类型。
有关详细信息,请参阅 Parameter Binding in ASP.NET Web API
这是服务器错误。添加错误报告代码后,我们可以看到问题是由于 Azure 上的 x64 / x86 不匹配,服务器无法加载它所依赖的 C++ DLL。现在有效的调用方式是我在问题中列出的第二个:
response = await client.PostAsync("api/segmentation/" + item.Id, new StringContent(""));
一位同事编写了一个 Azure 移动服务API,其中包括以下控制器方法:
public class SegmentationController : ApiController
{
// [...]
// POST api/<controller>/id
public async Task<string> Post(string id)
{
// [...]
我正在尝试从 Windows 通用应用程序调用它。对 GET 方法的调用没有问题,但我无法调用 POST 方法。这是我尝试过的:
response = await client.PostAsync("api/segmentation/", new StringContent(item.Id));
// 405 Method Not Allowed
response = await client.PostAsync("api/segmentation/" + item.Id, new StringContent(""));
// 500 Internal Server Error
response = await client.PostAsync("api/segmentation/", new StringContent("id=" + item.Id));
// 405 Method Not Allowed
response = await client.PostAsync("api/segmentation/", new StringContent("{\"id\":" + item.Id + "}"));
// 405 Method Not Allowed
(N.B。Marc's answer 中使用的 System.Collections.Specialized.NameValueCollection
在 WinRT / Windows Universal 上不可用。)
有可能我的第二次调用是正确的,错误在服务器端代码中;我们正在探索这种可能性。
对 ASP.Net RESTful API 方法进行 POST 调用的正确方法是什么,该方法需要一个名为 "id" 类型的参数 string
?
你的参数有问题。您有两个选择:
- 使用查询参数而不是正文。例如api/segmentation?id=abc
- 将
[FromBody]
属性添加到您的参数。例如public async Task<string> Post([FromBody]string id)
现在你的参数是从正文中读取的。默认情况下,仅从正文中读取复杂类型。
有关详细信息,请参阅 Parameter Binding in ASP.NET Web API
这是服务器错误。添加错误报告代码后,我们可以看到问题是由于 Azure 上的 x64 / x86 不匹配,服务器无法加载它所依赖的 C++ DLL。现在有效的调用方式是我在问题中列出的第二个:
response = await client.PostAsync("api/segmentation/" + item.Id, new StringContent(""));