C# 控制器中的嵌套函数

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 我已经

熟悉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 我已经尝试过这种方法。结果是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示例。