熟悉C#的MVC和API模板的新手。
使用简单控制器的简单新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 / works。 / 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();
}
}
答案 0 :(得分:0)
您必须调整路由配置并为子路由添加特殊条目。首先添加最具体的路线非常重要:
routes.MapHttpRoute(
name: "SysInfoApi",
routeTemplate: "api/Clients/{id}/Sysinfo/{param}",
defaults: new { controller = "SysInfo", param = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
在上面的示例中,有一个SysInfo
控制器的特定路由,它处理嵌套资源。以及默认路线。
具有SysInfo
操作的GET
控制器 - 请求可能如下所示
public class SysInfoController : ApiController
{
// GET api/client/{id}/sysinfo/
public string Get(int id)
{
return "value";
}
// GET api/client/{id}/sysinfo/{param}
public string Get(int id, string param)
{
return "value";
}
}
我不知道在WebApi中自动处理分层资源的方法。