Добрый день!
Помогите разобраться.
Нужно поменять 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;
}
}
Нравится
Сергей Хоменко пишет:
Через WebFaultException работает, правда нужного кода 422 нет в этом перечислении.
Тут пишут, что в старых версиях .NET такого значения не было, потом добавили, назвали «UnprocessableEntity». Как обходной вариант, предлагают вместо константы указывать «(HttpStatusCode)422».
По поводу тела, а разве такое вообще подходит по смыслу ошибки 422?
Я генерирую ошибки через
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);