C# 多个RESTAPI方法共享同一个控制器类可以吗?
最好的做法是将每个不同的Get方法放在自己的控制器类中,还是在同一个类中有多个相关和不相关的API方法(如果这些方法非常简单和简单的话)就可以了 例如,这两种API方法在同一个控制器类中运行良好,但在它们自己的类中会更好吗 如果是,为什么C# 多个RESTAPI方法共享同一个控制器类可以吗?,c#,asp.net-web-api,asp.net-web-api2,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api2,Asp.net Web Api Routing,最好的做法是将每个不同的Get方法放在自己的控制器类中,还是在同一个类中有多个相关和不相关的API方法(如果这些方法非常简单和简单的话)就可以了 例如,这两种API方法在同一个控制器类中运行良好,但在它们自己的类中会更好吗 如果是,为什么 public class TestController : ApiController { [HttpGet] [Route("api/test/ping")] public IHttpActionResult Ping() {
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);
}
}
}
一旦一个控制器中的多个操作的路由是不同的,并且不会在当前控制器或其他控制器中导致路由冲突,那么没有什么可以阻止您在控制器中执行多个操作 以您提供的示例为例。您可以利用控制器的路由前缀来帮助组织类似的路由
[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);
}
}
一旦一个控制器中的多个操作的路由是不同的,并且不会在当前控制器或其他控制器中导致路由冲突,那么没有什么可以阻止您在控制器中执行多个操作 以您提供的示例为例。您可以利用控制器的路由前缀来帮助组织类似的路由
[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);
}
}
就我个人而言,我会把相关的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
}
}
正如您所看到的,所有这些操作都在用户模型上工作,因此它们可以组合在一个控制器类中。我个人会将相关的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
}
}
正如您所看到的,所有这些操作都在用户模型上工作,因此它们可以组合在一个控制器类中。在一个控制器中有多个getter是完全合法的,特别是如果它们的路径应该相似的话。除了下面的答案之外,我建议您研究面向服务的体系结构。我想这会给你很多思考的问题,比如这个方法应该去哪里,因为我有一些服务/控制器,没有一个是适合这个方法的。在一个控制器中有多个getter是完全合法的,特别是如果它们的路径应该相似的话。除了下面的答案,我可以建议研究面向服务的体系结构吗。我想这会给你很多思考的问题,比如这个方法应该去哪里,因为我有一些服务/控制器,没有一个是适合这个方法的。