这两种形式的WebApi路由之间的差异?

时间:2018-06-12 07:49:42

标签: c# .net asp.net-mvc controller asp.net-web-api2

我是Web Api编程新手,并且是第一次使用.Net Framework Web App。我在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 个答案:

答案 0 :(得分:1)

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

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

第二个选项使用[HttpGet("SomeMethod/{parameter}")],操作方法的名称位于模板路径中。因此,如果您将SomeMethod重命名为MySuperSomeMethod,则生成的网址将始终为api/some/somemethod