Как поменять 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);

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

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