【发布时间】:2015-05-21 16:54:08
【问题描述】:
我是编写 RESTful Web 服务的新手,我想使用 ASP.NET Web API 构建一个 RESTful Web 服务,第三方开发人员将使用它来访问我的应用程序的数据。
我的控制器旨在响应以下 URI:
api/warehouse --> return list of warehouses
api/warehouse/001 --> return warehouse 001
api/Binwarehouse --> return list of bins by warehouses
api/Binwarehouse/001 --> return list of bins for warehouse 001
但我真正需要做的是让这个 uri 结构正常工作
api/warehouse/001/Binwarehouse --> return a list of bins for warehouse 001
api/warehouse/001/Binwarehouse/020 --> return bin "020" from warehouse 001
instead
api/Binwarehouse --> return list of bins by warehouses
api/Binwarehouse/001 --> return list of bins for warehouse 001
如果这是我的代码,我该怎么做?
GLOBAL.ASAX
using System;
using System.Web;
using System.Web.Optimization;
using System.Web.Routing;
using System.Web.Http;
namespace PSWMWrapperApi
{
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterOpenAuth();
RouteConfig.RegisterRoutes(RouteTable.Routes);
RouteTable.Routes.MapHttpRoute(name: "ApiClientes", routeTemplate: "api/{controller}/{dni}",
defaults: new { dni = System.Web.Http.RouteParameter.Optional });
}
}
}
WarehouseController.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
namespace PSWMWrapperApi
{
public class WarehouseController : ApiController
{
private Warehouse[] MostrarLista()
{
DataSet dsTemp = Funciones.ListaAlmacenes(Funciones.String_ConectaStatic, "1", "1", "1");
Warehouse[] listaBodegas = null;
if (dsTemp != null)
{
DataTable oDtTemp = dsTemp.Tables[0];
if (oDtTemp != null)
{
listaBodegas = new Warehouse[oDtTemp.Rows.Count];
for (int i = 0; i < oDtTemp.Rows.Count; i++)
{
DataRow orow = oDtTemp.Rows[i];
listaBodegas[i] = new Warehouse(orow["WarehouseId"].ToString(), orow["WarehouseDscr"].ToString());
}
}
}
return listaBodegas;
}
// GET api/<controller>
public IEnumerable<Warehouse> Get()
{
return MostrarLista();
// return listaClientes;
}
// GET api/<controller>/44444444K
public Warehouse Get(String dni)
{
return MostrarLista().Where(x => x.WarehouseId == dni).FirstOrDefault();
}
}
}
BinWarehouseController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Data;
namespace PSWMWrapperApi
{
public class BinWarehouseController : ApiController
{
private BinWarehouse[] MostrarLista()
{
DataSet dsTemp = Funciones.ListaBinsAlmacenes(Funciones.String_ConectaStatic, "1", "1","",""); // _fun.ListaAlmacenes( );
BinWarehouse[] listaBodegas = null;
if (dsTemp != null)
{
DataTable oDtTemp = dsTemp.Tables[0];
if (oDtTemp != null)
{
listaBodegas = new BinWarehouse[oDtTemp.Rows.Count];
for (int i = 0; i < oDtTemp.Rows.Count; i++)
{
DataRow orow = oDtTemp.Rows[i];
listaBodegas[i] = new BinWarehouse(orow["WarehouseId"].ToString(), orow["BinId"].ToString(), orow["BinDscr"].ToString());
}
}
}
return listaBodegas;
}
// GET api/<controller>
public IEnumerable<BinWarehouse> Get()
{
return MostrarLista();
// return listaClientes;
}
// GET api/<controller>/44444444K
public BinWarehouse[] Get(String dni)
{
return MostrarLista().Where(x => x.WarehouseId.Trim() == dni).ToArray();
}
}
}
感谢您的帮助
【问题讨论】:
-
看看属性路由
标签: c# asp.net rest asp.net-web-api