Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这两种WebApi路由形式之间的差异?_C#_.net_Asp.net Mvc_Controller_Asp.net Web Api2 - Fatal编程技术网

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

C# 这两种WebApi路由形式之间的差异?,c#,.net,asp.net-mvc,controller,asp.net-web-api2,C#,.net,Asp.net Mvc,Controller,Asp.net Web Api2,我是Web Api编程新手,第一次开发.Net Framework Web应用程序。我正在用Web Api调用包装我的一些对象,我想知道在我的控制器中这两种路由方法是否有任何区别?我不想一开始就使用它,只是后来发现它有一些缺点,等等 第一种方法是在类之前指定路由: [Route("api/[controller]/[action]")] public class SomeController : Controller { [HttpGet("{parameter}")] pub

我是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等功能。

这两个选项之间的区别在于模板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