我正在尝试实现一个通用的API控制器,以用于所有模型。
public class DefaultController<T> : ApiController
{
// GET: api/Default
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/Default/5
public string Get(int id)
{
return "value";
}
}
当我调用localhost时:xxxxxx/api/Default。它抛出错误
No type was found that matches the controller named 'Default'.
有没有人可以指导我正确的实现方法。
另外,如何在调用API时指定类型?
谢谢。
发布于 2018-01-11 15:19:10
如果这是您的Generic API Controller (Base Controller)
[Route("api/[controller]")]
public class DefaultController<T> : ApiController
{
// GET: api/{ControllerName}
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "first", "second" };
}
// GET: api/{ControllerName}/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
}
您可以使用Posts
的基本控制器
public class PostsController : DefaultController<Post> {}
或用于其他应用程序,如Comments
public class CommentsController : DefaultController<Comment> {}
您可以将控制器操作称为localhost:xxxx/api/posts
、localhost:xxxx/api/posts/5
、localhost:xxxx/api/comments
、localhost:xxxx/api/comments/12
发布于 2018-01-11 15:17:36
而是尝试从泛型基本控制器继承。
public class MyBaseController<T> : ApiController
{
// GET: api/Default
public IEnumerable<T> Get()
{
return callGenericMethod<T>();
}
}
现在可以创建任意数量的控制器:
public class DefaultController : MyBaseController<MySpecificType>
{
//add extra specific methods here or depend on the inherited ones only.
}
调用控制器将与调用非泛型控制器相同:
yourApiPath/Default/Get
https://stackoverflow.com/questions/48201485
复制相似问题