将每个不同的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);
}
}
}发布于 2018-07-27 11:46:09
一旦控制器的路由是不同的,并且不会在当前控制器或其他控制器中造成路由冲突,则没有什么可以阻止您在控制器中进行多个操作。
以你提供的例子为例。您可以利用控制器的路由前缀来帮助组织类似的路由。
[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);
}
}发布于 2018-07-27 12:04:45
就我个人而言,我会将执行相关工作的相关API操作放在一个单独的控制器类中。
在你给定的例子中,把它们放在一起是很好的。另一个例子是,您有一个Controller来处理用户模型上的所有操作(请注意不是完全有效的代码,但希望您能理解):
[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
}
}正如您所看到的,所有这些操作都在用户模型上工作,因此它们都适合于一个Controller类。
https://stackoverflow.com/questions/51557186
复制相似问题