我正在尝试实现一个用于所有模型的通用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时指定类型?
感谢。
答案 0 :(得分:2)
如果这是您的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
答案 1 :(得分:0)
尝试从通用基本控制器继承。
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