WebAPI - запрос с query-параметрами

214
17 мая 2018, 09:10

Делаю API:
Конфиругация:

        var address = "http://localhost:50353";
        var config = new HttpSelfHostConfiguration(address); //TODO: конфигурация
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "GetPackages",
            routeTemplate: "api/{controller}/{importStartDate}/{importEndDate}/{deliveryStartDate}/{deliveryEndDate}/{status}",
            defaults: new
            {
                controller = "Package",
                action = "GetPackages",
                importStartDate = RouteParameter.Optional,
                importEndDate = RouteParameter.Optional,
                deliveryStartDate = RouteParameter.Optional,
                deliveryEndDate = RouteParameter.Optional,
                status = RouteParameter.Optional,
            }
        );

Класс контроллера:

public partial class PackageController : ApiController
{
    [Route("package/{packageId}/{typeId}")]
    public List<TreeNode> GetPackageContentByType(int packageId, int typeId)
    {
        throw new NotImplementedException();
    }
    [Route("package/{importStartDate?}/{importEndDate?}/{deliveryStartDate?}/{deliveryEndDate?}/{status?}")]
    [ActionName("GetPackages")]
    public List<TreeNode> Get([FromUri]DateTime? importStartDate, [FromUri]DateTime? importEndDate, [FromUri]DateTime? deliveryStartDate, [FromUri]DateTime? deliveryEndDate, [FromUri]int? status)
    {
        throw new NotImplementedException();
    }
}

По URL http://localhost:50353/package/1/1 захожу в метод, получаю честный NotImplementedException.
По URL http://localhost:50353/package?importStartDate=2018-04-05 получаю ошибку:

No action was found on the controller 'Package' that matches the request.

В метод, само собой, не попадаю.

Похоже, что-то не так в маршруте, но что - не могу понять.

Answer 1

Попробуйте специфицировать типы у параметров роутинга:

public class PackageController : ApiController
{
    [Route("package/{packageId:int}/{typeId:int}")]
    public List<TreeNode> GetPackageContentByType(int packageId, int typeId)
    {
        throw new NotImplementedException();
    }
    [Route("package")]
    public List<TreeNode> Get(DateTime? importStartDate, DateTime? importEndDate, DateTime? deliveryStartDate, DateTime? deliveryEndDate, int? status)
    {
        throw new NotImplementedException();
    }
}

И удалите маппинг GetPackages из конфига

Ожидаю, что должно работать по http://localhost:50353/package?importStartDate=2018-04-05

Почитать

READ ALSO
Курсовая работа [требует правки]

Курсовая работа [требует правки]

Помогите пожалуйста если кто-то может перевести эту программу на языке C#Программа написано на языке Delphi

174
Действие при потери фокуса с элемента

Действие при потери фокуса с элемента

Нашел на просторах интернета событие для элемента ControlLostFocus Но в студии почему-то нет такого события?

152
upgrade contenido

upgrade contenido

Всем приветМожет кто сталкивался с такой cms как 'contenido', а точнее ее обновлением

194