Nano Hash - криптовалюты, майнинг, программирование

ASP.NET Web Api 2 — маршрутизация на основе атрибутов — как заставить параметр запрашивать только строку?

Я работаю над проектом Web Api 2 и использую маршрутизацию на основе атрибутов. Вот примерный маршрут:

[Route("{id:int}", Name = "GetEmployeeById")]
[HttpGet]
public IHttpActionResult GetEmployee(int id)
{
    ...
}

Это работает со следующими URL-адресами:

  • //хост/сотрудник/12345
  • //хост/сотрудник?id=12345

Я бы предпочел, чтобы первая форма (параметр в URI) не была разрешена, и работала бы только вторая форма (строка запроса).

Что я пробовал

В основном я пытался найти в Интернете способ заставить эту работу работать, и я не нашел многого.

На этой странице говорится об ограничениях маршрута, но этот синтаксис не работает (уже?).

Эта страница на самом деле не мешает работе формы URI.


Ответы:


1

Существует атрибут с именем «[FromUri]», который вы можете использовать для украшения параметра метода, и связыватель модели попытается найти этот параметр в строке запроса, это может не помочь вам в этом сценарии, но полезно знать об этом. это, если вы хотите передать параметры поиска, например, в метод Get.

Надеюсь, это поможет.

23.10.2014
  • [FromUri], по-видимому, принудительно использует параметр, который обычно берется из POST из строки запроса. Это бесполезно для этого вопроса, но мне было интересно; Спасибо! 23.10.2014

  • 2

    Пара способов добиться этого. Вот несколько вариантов

    1. Переименуйте параметр во что-то другое, кроме идентификатора (например, employeeId).
    2. Измените конфигурацию маршрутизации по умолчанию в WebApiConfig:

          //Default configuration, you can see here the "id" parameter which enables action/id matching
          config.Routes.MapHttpRoute(
              name: "DefaultApi",
              routeTemplate: "api/{controller}/{id}",
              defaults: new { id = RouteParameter.Optional }
          );
          //It should look like this
          config.Routes.MapHttpRoute(
                  name: "DefaultApi",
                  routeTemplate: "api/{controller}"
              );
      

    Также вы можете сделать это с помощью пользовательских атрибутов.

    22.10.2014
  • В настоящее время вся моя конфигурация маршрутизации такова: config.MapHttpAttributeRoutes();. Я не использую маршрутизацию по шаблону. Мне кажется, это не решит мою проблему. Почему я хочу переименовать параметр? id - это имя, которое я хочу, я просто хочу, чтобы его можно было установить только из строки запроса (а не из URI). Я что-то упускаю? 22.10.2014

  • 3

    На самом деле, я ошибся в своем исходном коде. Параметр строки запроса не работал с указанным маршрутом. Вместо этого я мог бы сделать это:

    [Route("", Name = "GetEmployeeById")]
    [HttpGet]
    public IHttpActionResult GetEmployee(int id)
    {
        ...
    }
    

    И это будет делать то, что я хочу. Он должен получить имя id из списка параметров функции.

    К сожалению, это означает, что я больше не могу накладывать на него ограничение, но я думаю, что могу просто проверить его в функции.

    22.10.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..