一位同事编写了一个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
?
答案 0 :(得分:0)
您的参数是问题所在。您有两种选择:
<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>►
<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]
有关详细信息,请参阅Parameter Binding in ASP.NET Web API
答案 1 :(得分:0)
这是服务器错误。一旦我们添加了错误报告代码,我们就会发现问题是服务器无法加载由于Azure上的x64 / x86不匹配而依赖的C ++ DLL。现在有效的呼叫方式是我在问题中列出的第二个:
response = await client.PostAsync("api/segmentation/" + item.Id, new StringContent(""));