ASP.Net WebAPI ActionName找不到路由

时间:2016-01-07 16:35:03

标签: asp.net-web-api knockout.js asp.net-web-api-routing

我正在尝试使用ActionName方法创建一个带有多个Get命令的WebAPI控制器。我在另一个项目上成功完成了这项工作,但是这个最新项目遇到了问题,无法理解为什么我的淘汰视图模型ajax调用无法找到特定的URI。

WebApiConfig.cs:

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

控制器:

    // GET api/lot
    [ActionName("Default")]
    public IEnumerable<DataObject> Get()
    {
         //...
    }

    // GET api/lot/Specific/5
    [ActionName("Specific")]
    public IEnumerable<DataObject> Get(int? data)
    {
        //...
    }

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

我对GET的默认操作非常完美,但当我尝试从视图模型中调用它时,特定操作仍会出现此错误:

“无法加载资源:服务器响应状态为404(未找到)”

我在[ActionName(“Specific”)]旁边添加了[HttpGet]并出现以下错误:

“获取http://localhost:57492/api/lot/Specific/1 404(未找到)”

我尝试了几种不同的东西,例如删除int?数据参数,但是当我尝试构建项目时,它告诉我已经存在具有相同参数的现有函数,即使使用不同的操作名称。

最终我想要多个Get(参数)动作来调用我的视图模型进行交互。

2 个答案:

答案 0 :(得分:1)

我能够通过添加带有HttpGet的Route属性并将我的所有函数重命名为GetAll(),GetSpecific(ind id)等唯一名称来解决这个问题。

    // GET api/lot
    [HttpGet]
    [Route("api/lot/GetAll")]
    public IEnumerable<DataObject> GetAll()
    {...}

    // GET api/lot/GetSpecific/{id}
    [HttpGet]
    [Route("api/lot/GetSpecific/{id}")]
    public IEnumerable<DataObject> GetSpecific(string id)
    {

答案 1 :(得分:0)

在config.Routes中添加新路由,如下所示。这会有帮助吗?我没有测试过这个。

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/specific/{data}",
            defaults: new { 
                action = "Specific",
                data = RouteParameter.Optional }
        );