Вопрос

Как поменять status code 422 в ответе на вебсервис

Добрый день!

 

Помогите разобраться.

Нужно поменять status code на 422 при ответе на вебсервис в блоке else.

 

[ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class ilayNewTerminalService: BaseService
    {
        [OperationContract]
        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,
        ResponseFormat = WebMessageFormat.Json)]
        public AuthorizationCodeResponse authorization_code(AuthorizationCodeRequest request) {
            var resultNew = new AuthorizationCodeResponse();
            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Contact");
            var colId = esq.AddColumn("Name");
            var colName = esq.AddColumn("ilayMainPhine");
            var esqFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, "ilayMainPhine", "+" + request.phone);
            esq.Filters.Add(esqFilter);
            var entities = esq.GetEntityCollection(UserConnection);
            if (entities.Count > 0)
            {
                resultNew.debug_text = entities[0].GetColumnValue(colId.Name).ToString();
                resultNew.phone = "+" + request.phone;
            } else {
                
            }
            return resultNew;
        }
    }

 

Нравится

9 комментариев
Лучший ответ

Сергей Хоменко пишет:
Через WebFaultException работает, правда нужного кода 422 нет в этом перечислении.

Тут пишут, что в старых версиях .NET такого значения не было, потом добавили, назвали «UnprocessableEntity». Как обходной вариант, предлагают вместо константы указывать «(HttpStatusCode)422».

 

По поводу тела, а разве такое вообще подходит по смыслу ошибки 422?

 

Сам сейчас на NetCore с WebInvoke бадаюсь.

Я генерирую ошибки через

WebFaultException error = new WebFaultException(HttpStatusCode.BadRequest);

throw error;

Но я там не вижу ошибки 422.

Еще в положительном иногда меняю через HttpContext.Current.Response.StatusCode = 201;

 

HttpStatusCode.UnprocessableEntity

Судя по документации https://docs.microsoft.com/ru-ru/dotnet/api/system.net.httpstatuscode?view=netcore-3.1 возвращает 422 ошибку.

Казанцев Андрей Юрьевич,

Андрей, спасибо! Через WebFaultException работает, правда нужного кода 422 нет в этом перечислении.

Ответ от сервера получаю с пустым Body. Может знаете, как при отправке такой ошибки в тело ответа объект вставить?

Сергей Хоменко пишет:
Через WebFaultException работает, правда нужного кода 422 нет в этом перечислении.

Тут пишут, что в старых версиях .NET такого значения не было, потом добавили, назвали «UnprocessableEntity». Как обходной вариант, предлагают вместо константы указывать «(HttpStatusCode)422».

 

По поводу тела, а разве такое вообще подходит по смыслу ошибки 422?

 

Зверев Александр,

В нашем API так прописали товарищи, теперь я должен ему следовать. Нашел вариант как это делать. Можно типизировать Эксепшн и в параметры вкладывать нужный объект:

throw new WebFaultException<AuthorizationCodeResponseEr>(body,HttpStatusCode.UpgradeRequired);

Александр, спасибо! Работает.

Показать все комментарии