2016-06-29 27 views
2

发现我有API controller与方法:的WebAPI HTTPDelete方法通过请求没有找到,但在扬鞭

[Route("campaigns")] 
    [HttpDelete] 
    public async Task<IHttpActionResult> Delete(string brandId,string campaignId) 
    { 
     try 
     { 
      var merchantId = CurrentUserInfo.GetMerchantId(); 
      await _service.DeleteAsync(merchantId, brandId, campaignId); 
      return StatusCode(HttpStatusCode.NoContent); 
     } 
     catch (Exception e) 
     { 
      Log(e); 
      return BadRequest(e.Message); 
     } 
    } 

而且从angularJSapp我发送请求:

$http.delete(config.resourceNames.campaign, { params: { brandId: brandId, campaignId: campaignId } }) 
      .then(function (response) { 
       return response; 
      }, function (error) { 
       return error; 
      }); 

配置文件:

var resourceNames = { 
    campaign: '/api/campaigns' 
}; 

所以路由是有效的。 但请求始终返回404 NOT FOUND

我通过Swagger进行了检查,并且DELETE方法在列表中可见,但是当我尝试使用它时。它也会返回NOT FOUND

这是为什么呢?

编辑:

在使用“国际空间站快车”有错误404,但是当我切换到“本地国际空间站”的错误改变405不允许的方法。

+1

使用fiddler看看实际的请求是什么样的,也许你会在那里发现你的错误。 –

回答

0

可能是你需要写:

[Route("api/campaigns")] 
+0

控制器有“api”前缀。 – Nerf

+0

路由似乎有点问题,因为它显示“404 NOT FOUND”错误,意味着无法命中目标操作。你确定'config.resourceNames.campaign'反映了正确的路线吗? – Tasawar

+0

不,路由很好。在Swagger中,该方法是可见的。 – Nerf

0

我遇到了这几次。虽然我不确定其根本原因是什么,但我可以说命名路线的帮助非常大。试试这个:

[Route("campaigns", Name = "delete-campaign")]