为什么找不到返回404的Web API 2操作?

时间:2016-08-16 17:52:34

标签: angularjs asp.net-web-api

这是我的ApiController:

[RoutePrefix("api/Campaign")]
public class CampaignController : ApiController
{
    private readonly ICampaignLogic _campaignLogic;

    public CampaignController(ICampaignLogic campaignLogic)
    {
        _campaignLogic = campaignLogic;
    }

    [HttpGet]
    [Route("GetCampaignsByYearCompanyAndContactIds/{companyId:int}/{contactId:int}/{year:int}")]
    public List<Campaign> GetCampaignsByYearCompanyAndContactIds(int companyId, int contactId, int year)
    {
        return _campaignLogic.GetByYearCompanyAndContactIds(year, companyId, contactId);
    }
}

这是我在AngularJS中进行调用的地方:

$http.get(ApiUrl + "/api/Campaign/GetCampaignsByYearCompanyAndContactIds",
        { params: { year: $scope.year, companyId: $scope.client, contactId: $scope.contactId } })
        .then(function (responses) {

    })

这是我在Chrome中调试时调用的内容:

http://localhost/MyApi/api/Campaign/GetCampaignsByYearCompanyAndContactIds?companyId=12046&contactId=13662&year=2016

所有内容都根据我的localhost设置正确,因为我正在调用其他API操作而没有任何问题。但是,当我调用这个时,我收到404 Not Found错误。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

根据您的路线,网址需要包含路线中的参数,而不是查询字符串的一部分。如果要仅在查询字符串中使它们可用,则从路由属性中删除它们。

你应该在AngularJS中传递什么

http://localhost/MyApi/api/Campaign/GetCampaignsByYearCompanyAndContactIds/12046/13662/2016

因此,您需要使用参数构建网址,不能将params与此网址一起使用。

如果您想在AngularJS中使用params,请将Route属性更改为以下内容。

[Route("GetCampaignsByYearCompanyAndContactIds")]