C# 控制器中的嵌套函数
熟悉MVC和API模板,熟悉C# 一个简单控制器的全新WebAPI项目。Url路径类似于C# 控制器中的嵌套函数,c#,asp.net-web-api,C#,Asp.net Web Api,熟悉MVC和API模板,熟悉C# 一个简单控制器的全新WebAPI项目。Url路径类似于/api/Clients/1,是否有方法对嵌套控制器进行排序?或者通过如下url路径在同一控制器中执行函数:/api/Clients/1/Sysinfo/typeOf 我有一个模型客户端,其中包含sysinfo项的属性/api/Clients/1返回Id为1的对象客户端的所有属性。例如,我只希望返回带有/api/Clients/1/Sysinfo/RAM的特定项目 @Joachim Rosskopf 我已经
/api/Clients/1
,是否有方法对嵌套控制器进行排序?或者通过如下url路径在同一控制器中执行函数:/api/Clients/1/Sysinfo/typeOf
我有一个模型客户端,其中包含sysinfo项的属性/api/Clients/1返回Id为1的对象客户端的所有属性。例如,我只希望返回带有/api/Clients/1/Sysinfo/RAM的特定项目
@Joachim Rosskopf 我已经尝试过这种方法。结果是404/客户/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();
}
}
您必须调整路由配置,并为子路由添加特殊条目。首先添加最具体的路线非常重要:
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
控制器的特定路由。以及默认路线
带有GET
请求操作的SysInfo
控制器可以如下所示
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中的分层资源。您的意思是要处理这两种类型的URL吗?控制器和路由上的此链接可能会有所帮助:是的。如前所述,我是MVC新手,可能这只是一个逻辑错误。我有一个模型客户端,其中包含sysinfo项的属性/api/Clients/1返回Id为1的对象客户端的所有属性。例如,我只希望返回带有/api/Clients/1/Sysinfo/RAM的特定项目。已更新的FP!提前谢谢!在答案中添加了一个SysInfoController示例。