我对RESTful服务的设计感到非常困惑!
如果我使用vanilla MVC3 / 4进行此操作,那么我只需要标记[HTTPGet]等操作方法,并且每个控制器可以有多个Get。我这样通过他们的“元组”来组织控制器。
我查看了Web API MVC4模板,它为我提供了从Http GET到Getxxx()方法的自动转换 - 但这意味着单个Get per controller并按对象组织控制器,而不是函数.. 。这似乎有道理。
我看到很多关于添加命名路线的帖子 - 但这似乎打破了Get,Post,Put,Delete的自然模型。如果我这样做 - 那么我(实质上)不是回到香草MVC4吗?
答案 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" };
}