对REST和.Net Web Api感到困惑 - 每个控制器应该有一个GET吗?

时间:2013-11-17 09:29:45

标签: rest asp.net-mvc-4 asp.net-web-api

我对RESTful服务的设计感到非常困惑!

如果我使用vanilla MVC3 / 4进行此操作,那么我只需要标记[HTTPGet]等操作方法,并且每个控制器可以有多个Get。我这样通过他们的“元组”来组织控制器。

我查看了Web API MVC4模板,它为我提供了从Http GET到Getxxx()方法的自动转换 - 但这意味着单个Get per controller并按对象组织控制器,而不是函数.. 。这似乎有道理。

我看到很多关于添加命名路线的帖子 - 但这似乎打破了Get,Post,Put,Delete的自然模型。如果我这样做 - 那么我(实质上)不是回到香草MVC4吗?

  • 对拥有大量控制器有什么影响吗?
  • 我在想什么 关于这个吗?

1 个答案:

答案 0 :(得分:1)

不久,

  

对于拥有大量控制器有什么影响吗?

没有

  

我是否正确地考虑过这个问题?

一般都是。

默认WebAPI / MVc模板使用在前缀上进行中继并命名为GetXXX,PostXX的路由。

RouteTable.Routes.MapRoute(
     "WithActionApi",
     "api/{controller}/{action}/{id}"
 );

但您可以使用操作名称创建自己的自定义路由。然后你使用你的动作方法的URL名称,并且你已经编写了属性来设置HTTP动词,如[HttpGet]

RouteTable.Routes.MapRoute(
    "DefaultApi",
    "api/{controller}/{id}",
    new { action="DefaultAction", id = System.Web.Http.RouteParameter.Optional }
);
[ActionName("DefaultAction")] //Map Action and you can name your method with any text
public string Get(int id)
{
    return "object of id id";
}        

[HttpGet]
public IEnumerable<string> ByCategoryId(int id)
{
    return new string[] { "byCategory1", "byCategory2" };
}