Как создать веб-API ASP.NET MVC4 json, который позволяет искать продукты по идентификатору, штрих-коду, поисковому запросу или извлекать все продукты с даты?
Ниже я попытался использовать контроллер ASP.NET MVC4.
Вызов
http://localhost:52216/admin/api/Products/GetSince?since=2014-03-16%2021:47:29&_=1395007124964
возвращает ошибку
Multiple actions were found that match the request:
System.Net.Http.HttpResponseMessage GetSince(System.String) on type MyApp.Controllers.ProductsController\r\n
System.Net.Http.HttpResponseMessage GetId(System.String) on type MyApp.Controllers.ProductsController"
Как это исправить? Этот код выглядит некрасиво, он содержит ряд похожих методов. Какой лучший способ создать такой API? Как улучшить этот код? Следует использовать метод Http GET, но имена методов и подписи могут быть изменены.
Используются ASP.NET/Mono MVC4, jquery, jquery UI. Сервер Windows 2003 также должен поддерживаться, поэтому нельзя использовать .NET 4.5 или MVC5.
public class ProductsController : ApiController
{
[HttpGet]
public HttpResponseMessage GetSince([FromUri]string since))
{
var toodelist = GetProducts(since, null, null, null);
return Request.CreateResponse(HttpStatusCode.OK,
new { products = toodelist.ToArray() });
}
[HttpGet]
public HttpResponseMessage GetId([FromUri]string id)
{
var toodelist = GetProducts(null, null, id, null);
return Request.CreateResponse(HttpStatusCode.OK,
new { products = toodelist.ToArray() });
}
[HttpGet]
public HttpResponseMessage GetBarcode([FromUri]string barcode)
{
var toodelist = GetProducts(null, barcode, null, null);
return Request.CreateResponse(HttpStatusCode.OK,
new { products = toodelist.ToArray() });
}
[HttpGet]
public HttpResponseMessage GetTerm([FromUri]string term)
{
var toodelist = GetProducts(null, null, null, term);
return Request.CreateResponse(HttpStatusCode.OK,
new { products = toodelist.ToArray() });
}
static List<Product> GetProducts(string since, string barcode, string id, string term)
{
... retrieves list of product from database using specified search criteria
if not null
}
}