【问题标题】:WebAPI HTTPDelete method not found via request but found in SwaggerWebAPI HTTPDelete 方法未通过请求找到,但在 Swagger 中找到
【发布时间】:2016-06-29 09:35:30
【问题描述】:

我有API controller 方法:

    [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

为什么会这样?

编辑:

使用“ISS Express”时出现错误 404,但当我切换到“Local ISS”时,错误变为 405 Method not allowed。

【问题讨论】:

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

标签: c# angularjs asp.net-web-api


【解决方案1】:

可能你需要写:

[Route("api/campaigns")]

【讨论】:

  • 控制器有“api”前缀。
  • 路由似乎有问题,因为它显示404 NOT FOUND 错误,这意味着无法命中目标操作。你确定config.resourceNames.campaign 反映了正确的路线吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多