Я пытаюсь установить шаблон кодирования (некоторые правила) в сервисах, которые мы создаем для нашего бизнеса. Мы следуем основным указаниям, изложенным apigree для проектирования сервисов RESTful.ServiceStack Маршруты и глаголы
Одним из правил, которые мы хотели бы принять, является блокирование определенных комбинаций маршрутов и глаголов, которые мы не хотим поддерживать. Предположительно, мы отправим обратно HttpStatusCode.NotSupported для этих незаконных комбо и, возможно, для чтения человеком?
Законные комбо мы хотим поддержать являются:
GET /resource - lists all resources
GET /resource/{id} - retrieves specific resource by ID
POST /resource - adds a new resource
PUT /resource/{id} - updates specific resource by ID
DELETE /resource/{id} - deletes specific resource by ID
Есть некоторые незаконные комбо мы явно не хотят поддерживать.
POST /resource
PUT /resource
DELETE /resource
У нас есть валидаторы для каждого поддерживаемого маршрута. Но у нас нет ни одного из этих незаконных маршрутов, определенных где-либо в нашей кодовой базе.
Из тестирования мы узнали, что если клиент отправляет запрос GET /resource/{id}
с пустым идентификатором (String.Empty), то ServiceStack магия не выполняет валидатор для этого запроса (GET /resource/{id}
), но вместо этого перенаправляет на GET/ресурса. Мы считаем, что он делает то же самое для DELETE /resource/{id}
и PUT /resource/{id}
. Но ни одно из этих поведения по умолчанию не является желательным, мы скорее хотим вернуть HttpStatusCode.NotSupported или с некоторым заголовком, направляющим клиент в документацию API (или некоторые такие рекомендации).
Не могли бы вы предложить некоторые варианты для обработки этих случаев явно в рамках?
веселит
Проблема заключается в том, что ваше решение является именно то, что мы имеем (кроме того, что наш Id поля является строка не целое). Проблема в том, что когда мы вызываем GET/resource/{Id}, и идентификатор пуст (т. Е. String.Empty), SS перенаправляет вызов Get/resource, а не 404 или любую другую проверку. Здесь есть какая-то магия. Мы должны контролировать это. –
@JezzSantos Вы имеете в виду 'GET/resource /' redirects? это будет ASP.NET, делающий перенаправление не ServiceStack. Поэтому не полагайтесь на разницу между «GET/resource» и «Get/resource /», они оба должны означать одно и то же, т. Е. ПОЛУЧИТЬ все ресурсы. – mythz
Ах! спасибо, что имеет смысл.Наверное, должен быть какой-то Trim(), идущий где-то в конце маршрута, возможно? –