首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个REST方法共享同一个控制器类可以吗?

多个REST方法共享同一个控制器类可以吗?
EN

Stack Overflow用户
提问于 2018-07-27 11:40:26
回答 2查看 1.1K关注 0票数 1

将每个不同的Get方法放在自己的控制器类中是最佳实践,还是在同一个类中有多个(相关的和非相关的) API方法非常好,如果这些方法非常简单和简单的话。

例如,这两个API方法在同一个控制器类中工作得很好,但是它们在自己的类中会更好吗?

如果是的话,为什么?

代码语言:javascript
复制
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);
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-27 11:46:09

一旦控制器的路由是不同的,并且不会在当前控制器或其他控制器中造成路由冲突,则没有什么可以阻止您在控制器中进行多个操作。

以你提供的例子为例。您可以利用控制器的路由前缀来帮助组织类似的路由。

代码语言:javascript
复制
[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);
    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-07-27 12:04:45

就我个人而言,我会将执行相关工作的相关API操作放在一个单独的控制器类中。

在你给定的例子中,把它们放在一起是很好的。另一个例子是,您有一个Controller来处理用户模型上的所有操作(请注意不是完全有效的代码,但希望您能理解):

代码语言:javascript
复制
[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类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51557186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档