向我的WebAPI添加了第二个控制器,但它不起作用

时间:2019-07-05 17:24:36

标签: c# asp.net-mvc asp.net-web-api asp.net-web-api-routing

在我的WebAPI项目中添加了第二个控制器,它也不能完全正常工作,但是第一个控制器正在按预期工作

默认URI适用于第一个控制器返回所有记录: http://localhost:59654/api/TidalBatch

第二个控制器不起作用,并返回相关错误: http://localhost:59654/api/TidalBatchConsolidated

但是,如果我传入{id},那么它在我使用id时确实起作用(显示示例): http://localhost:59654/api/TidalBatchConsolidated/BAM

试图修改路由地址

WebAPI配置:             config.MapHttpAttributeRoutes();

@media screen and (max-width: 780px){
.intro .intro-title {
    color: #fff;
    font-weight: 600;
    font-size: 2rem;
}
}

我有2个控制器, config.Routes.MapHttpRoute( name: "TidalBatchApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "TidalBatchConsolidatedApi", routeTemplate: "api/TidalBatchConsolidated/{id}", defaults: new { id = RouteParameter.Optional } ); TidalBatchController.cs。两者都继承自TidalBatchConsolidatedController.cs类。

这是我的第二个控制器未按预期工作的示例:

ApiController

当我导航到该地址中的基本控制器时,它应根据传入的实体数据模型以JSON格式返回List结果。

1 个答案:

答案 0 :(得分:0)

首先,注册路由的顺序很重要,因为在更特定的路由之后需要注册更多通用路由。其次,您需要更具体的路由来匹配控制器。

config.MapHttpAttributeRoutes();

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

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

控制器还需要确保有匹配的动作

例如

public class TidalBatchConsolidatedController: ApiController {

    [HttpGet]
    public IHttpActionResult Get() {
        //...
    }

    [HttpGet]
    public IHttpActionResult Get(string id) {
        //...
    }

}

由于您已启用config.MapHttpAttributeRoutes();的属性路由,因此可以放弃基于约定的路由,而在控制器上使用属性路由

[RoutePrefix("api/TidalBatchConsolidated")]
public class TidalBatchConsolidatedController: ApiController {

    //GET api/TidalBatchConsolidated
    [Route("")] //Default route
    [HttpGet]
    public IHttpActionResult GetAll() {
        //...
    }


    //GET api/TidalBatchConsolidated/BAM
    [Route("{id}")]
    [HttpGet]
    public IHttpActionResult Get(string id) {
        //...
    }

}

引用Attribute Routing in ASP.NET Web API 2