Передача исключений валидации через WCF REST - PullRequest
2 голосов
/ 23 марта 2010

Я использую WCF и REST, и у меня есть сложные типы, которые работают нормально.Теперь мне нужно проверить для проверки, я думаю об использовании DataAnnotations, например,

public class Customer
{
   [Required]
   public string FirstName {get;set;}
}

Теперь, где проблема заключается в том, как передать эту проверку в службу REST?

ТАКЖЕ мне нужнопроверить объект, когда он возвращается, и выдать исключение, если я хочу выдать исключение, то каков наилучший способ сделать это с помощью REST?

Ответы [ 2 ]

4 голосов
/ 05 апреля 2010

Я бы использовал Блок приложения проверки , включенный в Microsoft Enterprise Library , для проверки объектов передачи данных , используемых в Сервисный интерфейс. Вы можете использовать атрибуты для оформления свойств объектов с помощью правил проверки , во многом так же, как с ASP.NET Data Annotations .

В случае сбоя проверки вы должны вернуть соответствующий код ошибки HTTP и указать подробности ошибки в ответе HTTP.

Вот пример:

public void PostCustomer(Customer instance)
{
    ValidationResults results = Validation.Validate(instance);

    if (!results.IsValid)
    {
        string[] errors = results
            .Select(r => r.Message)
            .ToArray();

        WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.BadRequest;
        WebOperationContext.Current.OutgoingResponse.StatusDescription = String.Concat(errors);
    }

    // Proceed with custom logic
}

Если вы используете WCF REST Starter Kit , вы должны вместо этого выбросить WebProtocolException , как описано в этой статье .

1 голос
/ 02 апреля 2010

Я бы хотел написать собственную реализацию IDispatchMessageInspector, в которой в методе AfterReceiveRequest вы вручную вызываете архитектуру проверки.

Я не буду вдаваться в подробности того, как вызвать архитектуру проверки аннотаций данных, поскольку я уверен, что вы можете найти это где-нибудь в сети, если вы еще не знаете, как это сделать. Тем не менее, когда у вас есть результаты проверки, вы можете перечислить их, а затем, если есть какие-либо неудачные проверки, вы можете генерировать общую ошибку проверки, заполненную деталями из реализации AfterReceiveRequest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...