【发布时间】:2014-01-05 23:14:29
【问题描述】:
不熟悉 MVC 和 API 模板,熟悉 C#。
简单的新 WebAPI 项目,带有一个简单的控制器。像/api/Clients/1 这样的网址路径,有没有办法对嵌套控制器进行排序?或者通过遵循这样的 url 路径在同一个控制器中执行一个函数:/api/Clients/1/Sysinfo/typeOf?
我有一个模型客户端,其中包含 sysinfo 项的属性。 /api/Clients/1 返回 ID 为 1 的对象 Client 的所有属性。例如,我只想要 /api/Clients/1/Sysinfo/RAM 返回的特定项目。
@Joachim Rosskopf 我已经尝试过这种方法。它导致 404./clients/1/ 有效。 /clients/1/sysinfo 不起作用。
使用以下路线:
routes.MapRoute(
name: "Sysinfo",
url: "Clients/{id}/Sysinfo/{type}",
defaults: new { controller = "Sysinfo", type = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
创建了一个新的控制器 SysinfoController:
public class SysinfoController : ApiController
{
public Sysinfo GetAllSysinfoItems()
{
return new Sysinfo { Id = 1, RAM = "1GB" };
}
public IHttpActionResult GetSysinfoByType(int id)
{
return Ok();
}
}
【问题讨论】:
-
您的意思是要处理两种类型的这些网址吗?
-
这个关于控制器和路由的链接可能会有所帮助:asp.net/mvc/overview/controllers-and-routing
-
确实如此。如前所述,我是 MVC 的新手,也许这只是一个逻辑错误。我有一个模型客户端,其中包含 sysinfo 项的属性。 /api/Clients/1 返回 ID 为 1 的对象 Client 的所有属性。例如,我只想要 /api/Clients/1/Sysinfo/RAM 返回的特定项目。
标签: c# asp.net-web-api