是将每个不同的Get
方法放入其自己的控制器类中的最佳实践,还是在同一个类中具有多个(相关和不相关)API方法(如果这些方法非常有用)是否完美?简单而简单。
例如这两个API方法在同一个控制器类中可以正常工作,但是在自己的类中会更好吗?
如果是,为什么?
public class TestController : ApiController
{
[HttpGet]
[Route("api/test/ping")]
public IHttpActionResult Ping()
{
try
{
return Ok("HELLO");
}
catch (Exception ex)
{
return Content(HttpStatusCode.InternalServerError, ex.Message);
}
}
[HttpGet]
[Route("api/test/echo/{message}")]
public IHttpActionResult Echo(string message)
{
try
{
return Ok(message);
}
catch (Exception ex)
{
return Content(HttpStatusCode.InternalServerError, ex.Message);
}
}
}
答案 0 :(得分:3)
一旦它们的路由不同并且不会在当前或其他控制器中引起路由冲突,就不会阻止您在一个控制器中执行多个操作。
以您提供的示例为例。您可以利用控制器的路由前缀来帮助组织相似的路由
[RoutePrefix("api/test")]
public class TestController : ApiController {
//GET api/test/ping
[HttpGet] [Route("ping")]
public IHttpActionResult Ping() {
return Ok("HELLO");
}
//GET api/test/echo/hello%20world
[HttpGet] [Route("echo/{message}")]
public IHttpActionResult Echo(string message) {
if(message == null)
return BadRequest();
return Ok(message);
}
}
答案 1 :(得分:2)
个人而言,我会将可以一起执行相关工作的相关API动作放在一个单一的控制器类中。
在您给出的示例中,将它们放在一起会很好。再举一个例子,假设您有一个处理用户模型上所有动作的控制器(请注意,代码并非完全有效,但希望您能理解这一点):
[RoutePrefix("api/users")]
public class UserController: ApiController
{
[HttpGet]
public IHttpActionResult GetUsers()
{
// GET all users.
}
[HttpGet]
[Route("{id}")]
public IHttpActionResult GetUserById(int id)
{
// GET user by ID
}
[HttpPost]
public IHttpActionResult CreateUser()
{
// Create User
}
[HttpPut]
[Route("{id}")]
public IHttpActionResult UpdateUser()
{
// Update User
}
}
如您所见,所有这些动作都在User模型上起作用,因此它们在Controller类中合为一体。