这两种形式的 Web Api 路由之间的区别?

Differences between these two forms of WebApi routing?

我是 Web Api 编程的新手,并且是第一次使用 .Net Framework Web 应用程序。我在 Web Api 调用中包装了我的一些对象,我想知道我的控制器中的这两种路由方法是否有任何区别?我不想一开始就用,后来才发现它有一些缺点等等。

第一种方法是在 class:

之前指定路由
[Route("api/[controller]/[action]")]
public class SomeController : Controller {

    [HttpGet("{parameter}")]
    public Object SomeMethod(int parameter) { ... }

    (...)
}

第二种方法是在每个方法之前指定路由:

[Route("api/[controller]")]
public class SomeController : Controller {

    [HttpGet("SomeMethod/{parameter}")]
    public Object SomeMethod(int parameter) { ... }

    (...)
}

我只是没有足够的经验来了解这两个代码块之间的区别,以及是否有任何其他更有效的方法来解决这个问题。谢谢!

我以后还需要实现 Post、Put、Delete 等。

这两个选项的区别在于模板 URL 中存在 [action]。因此,如果您了解 [controller] 的工作原理,那么也很容易理解 [action] 的目的。

当您不想在重命名操作方法时打扰自己时,第一个选项 ([Route("api/[controller]/[action]")]) 更好。使用此选项,将来如果您重命名您的操作方法,它将自动反映在 URL 中。实际上你有 api/some/somemethod 作为 URL 但如果你将 SomeMethod 重命名为 MySuperSomeMethod,新的 URL 将是 api/some/mysupersomemethod

第二个选项使用 [HttpGet("SomeMethod/{parameter}")] 并且您的操作方法的名称在模板路由内。因此,如果您将 SomeMethod 重命名为 MySuperSomeMethod,生成的 URL 将始终是 api/some/somemethod