PUT请求在部署时将映射到GET请求

时间:2017-03-22 05:48:54

标签: asp.net-web-api azure-mobile-services

我面临一个奇怪的问题。在我的Azure移动应用程序中,我添加了一个简单的vanilla webapi控制器,带有标准的http动词get,put等。现在在我的localhost上一切正常。但是当我将它部署到我的azurewebsite时。并使用Post man打电话。 PUT请求被映射到GET代码。我使用Postman,fiddler测试过。 我确信我错过了,但无法弄明白,检查路线,尝试了多种选择,但是无法弄明白。 DELETE和POST也是如此。下面是示例代码enter image description here

[MobileAppController]
public class TestController : BaseController
{
    // GET: api/Test
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET: api/Test/5
    public string Get(int id)
    {
        return "value";
    }

    // POST: api/Test
    [Route("api/test")]
    public async Task<string> Post([FromBody]string value)
    {
        await Task.Delay(100);
        return "post: " + value;
    }

    // PUT: api/Test/5
    [Route("api/test/{id}")]
    public async Task<string> Put(int id, [FromBody]string value)
    {
        await Task.Delay(100);
        return "put: " + value;
    }

    // DELETE: api/Test/5
    [Route("api/test/{id}")]
    public async Task<string> Delete(int id)
    {
        await Task.Delay(100);
        return "delete: " + id;
    }

2 个答案:

答案 0 :(得分:0)

您正在通过WebAPI混合路由和通过移动应用程序进行路由,并且它们存在冲突。选一个。对于这个应用程序,我建议删除MobileAppController属性,然后使用WebAPI路由。

答案 1 :(得分:0)

确保您通过SSL提出请求,即您的网址应该从https开始。

当我使用Postman时,我的网址以“http”开头,任何POST / PUT / DELETE请求都会映射到GET。如果我将其更改为“https”,一切都按预期工作。