这两种WebApi路由形式有什么区别?

3
我是一名新手Web Api程序员,第一次为.Net Framework Web应用程序工作。我正在将我的一些对象包装在Web Api调用中,我想知道控制器中这两种路由方法是否有任何区别?我不想开始使用其中一种,然后发现它有缺点等等。
第一种方法是在类之前指定路由:
[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等功能。

1个回答

1
两个选项的区别在于模板URL中是否存在 [action]。因此,如果您了解[controller]的工作原理,那么理解[action]的目的也很容易。
第一种选项 ([Route("api/[controller]/[action]")]) 在您不想在重命名操作方法时麻烦自己时更好。使用此选项,如果您将来重命名操作方法,它将自动反映在URL中。实际上,URL 是 api/some/somemethod,但是如果您将SomeMethod重命名为MySuperSomeMethod,新 URL 将为api/some/mysupersomemethod
第二个选项使用[HttpGet("SomeMethod/{parameter}")],并且您的操作方法名称位于模板路由中。因此,如果您将SomeMethod重命名为MySuperSomeMethod,生成的 URL 将始终为api/some/somemethod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接