У меня есть несколько вопросов, связанных с реализацией службы REST с использованием ServiceStack.
-
Для операции GET я определяю свой запрос DTO следующим образом:
[Route("/Customer/{ID}", Verbs = "GET")] public class GetCustomer : IReturn<GetCustomerResponse> { .... .... }
Здесь "GetCustomer" - запрос DTO, а "GetCustomerResponse" - ответ DTO. Но для операции PUT/POST/DELETE мне просто нужно знать, успешно ли операция успешно завершена или нет, и если "нет", то каково исключение. Итак, каково должно быть мое определение запроса для POST/PUT/DELETE? Должен ли он использовать IReturnVoid, как показано ниже?
[Route("/Customer/{ID}", Verbs = "DELETE")]
public class DeleteCustomer : IReturnVoid
{
....
....
}
Если мне нужно использовать IReturnVoid, то как я могу получить любую информацию об исключении, которая может возникнуть при совершении моей операции?
В документе обработки ошибок для стека служб он написан и цитирую ниже
Типы ответов об ошибках
Ответ на ошибку, возвращаемый при исключении Exception зависит от того, является ли условно названный {RequestDto} Response DTO существует или нет.
Если он существует:
Ответ {RequestDto} возвращается независимо от службы тип ответа метода. Если DTO {RequestDto} Response DTO имеет Свойство ResponseStatus, оно заселено иначе ResponseStatus будут возвращены. (Если вы украсили ответ {ResponseDto} класса и свойств с атрибутами [DataContract]/[DataMember], затем ResponseStatus также необходимо украсить, чтобы заполнить).
В противном случае, если это не так:
Общий ответ ErrorResponse возвращается с заполненным ResponseStatus свойство.
Клиенты службы прозрачно обрабатывают различные ответы об ошибках типы, а для безрисковых форматов, таких как JSON/JSV/etc, нет фактических видимая разница между возвратом ResponseStatus в пользовательском или generic ErrorResponse - поскольку оба они выдают один и тот же ответ на провода.
То, что я не получаю сверху, должно быть типом возврата для моего метода Delete в моей реализации сервиса? Как я могу реализовать свой метод удаления без определения ответа DTO удаления, но все же я могу получить информацию об исключении "ErrorResponse"?
- Можно ли определить маршрут с помощью глагола "DELETE"? У меня есть реализация.
Маршрут:
[Route("/DeleteCustomer/{ID}", Verbs = "DELETE")]
public class DeleteCustomer : IReturn<DeleteCustomerResponse>
{
public int ID { get; set; }
}
Реализация метода:
public DeleteContactResponse Delete(DeleteContact request)
{
.....
}
Но всякий раз, когда я вызываю это удаление с помощью моего клиента, я всегда получаю исключение "NotFound". Я пробовал разные клиенты, но со всем получаю ошибку 404.
Одна из ссылок доступных вместе с документом Servicestack, повторно использует глагол "GET" и "DELETE" вместе.
В другой ссылке показано, что не все браузеры поддерживают операцию удаления.
Так интересно, как должна быть реализована операция удаления?