使用HTTPClient.PostAsync

时间:2015-04-24 09:53:09

标签: asp.net-web-api asp.net-web-api2

一位同事编写了一个Azure Mobile Service API,其中包含以下控制器方法:

public class SegmentationController : ApiController
{
    // [...]

    // POST api/<controller>/id
    public async Task<string> Post(string id)
    {
        // [...]

我试图通过Windows Universal应用程序调用它。对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 

Marc's answer中使用的N.B。System.Collections.Specialized.NameValueCollection在WinRT / Windows Universal上不可用。)

我的第二次调用可能是正确的,并且错误在服务器端代码中;我们正在探索这种可能性。

对ASP.Net RESTful API方法进行POST调用的正确方法是什么,该方法需要一个名为&#34; id&#34;的参数。类型为string

2 个答案:

答案 0 :(得分:0)

您的参数是问题所在。您有两种选择:

  1. 使用查询参数而不是正文。例如API /分段?ID = ABC
  2. <li class="dropdown menu-item"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Electronics</a> <ul class="dropdown-menu mega-menu" > <li class="yamm-content" > <div class="row" > <div class="col-md-4" > <ul class="list-unstyled" > <table> ?php $cnt=0; while($cnt>0) { if($cnt==0) { ?> <tr> <?php } ?> <td> li><a href="#" style="font-weight:bold">Laptops And its accesories</a>&#9658 <ul > <li><a href="#">HDD</a></li> <li><a href="#">DVD Player</a></li> <li><a href="#">Motherboard </a></li> <li><a href="#">Mouse and Keyboards</a></li> <li><a href="#">Headphone</a></li> <li><a href="#">Printers</a></li> <li><a href="#">Data Cards </a></li> </ul> </li> </td> <?php $cnt=$cnt+1; if($cnt>2) { $cnt=0; } ?> </tr> </table> </ul> </div> <div class="col-md-4"> <ul class="list-unstyled"> </ul> </div> <div class="col-md-4"> <ul class="list-unstyled"> </ul> </div> </div> </li> </ul> </li> 属性添加到参数中。例如[FromBody]
    现在您的参数从正文中读取。默认情况下,只从主体中读取复杂类型。
  3. 有关详细信息,请参阅Parameter Binding in ASP.NET Web API

答案 1 :(得分:0)

这是服务器错误。一旦我们添加了错误报告代码,我们就会发现问题是服务器无法加载由于Azure上的x64 / x86不匹配而依赖的C ++ DLL。现在有效的呼叫方式是我在问题中列出的第二个:

response = await client.PostAsync("api/segmentation/" + item.Id, new StringContent(""));