【问题标题】:Nested functions in controller控制器中的嵌套函数
【发布时间】: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


【解决方案1】:

您必须调整路由配置并为子路由添加特殊条目。首先添加最具体的路线很重要:

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-requests 操作的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 中自动处理分层资源的方法。

【讨论】:

  • 更新了 FP!提前谢谢!
  • 在答案中添加了一个 SysInfoController 示例。
猜你喜欢
  • 2019-05-13
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多