Возвращение кода ошибки из контроллера с помощью System.Web.Http

У меня есть очень легкий REST API, который я написал, который проверяет пользователя. Я хочу вернуть валидацию как объект JSON, что я могу, но если отсутствуют аргументы, я хочу вернуть ошибку с некоторой информацией. Вот мой контроллер

    public class GraphAccessController : ApiController
    {
        private UserValidation _userValidation;
        private UserPermissions _userPermissions;
        string _application;

        public GraphAccessController()
        {
            _userValidation = new UserValidation();
            _userPermissions = new UserPermissions();
        }
        public object GetUserValidation(string application)
        {

            if (string.IsNullOrEmpty(application))
            {
                return StatusCode(HttpStatusCode.MethodNotAllowed);
                //return new HttpResponseException(HttpStatusCode.MethodNotAllowed);
            }
            try
            {
                _application = application;
                ValidateUser(WindowsIdentity.GetCurrent(), application);
                return _userValidation;
            }
            catch (HttpResponseException e)
            {
                string error = e.ToString();
                return StatusCode(HttpStatusCode.InternalServerError);

            }
        }....(other private calls for validation)
{

Когда передается "application", я получаю хороший объект JSON. Однако, когда я пытаюсь вернуть ошибку пользователю при проверке IsNullOrEmpty, если я просто вызываю с PostMan:

return StatusCode(HttpStatusCode.MethodNotAllowed)

статус установлен на "Метод 405 не разрешен", но я хотел бы передать текст, чтобы указать, почему это не удалось. Итак, я попробовал:

throw new HttpResponseException(HttpStatusCode.MethodNotAllowed);

и это просто останавливает выполнение в моем контроле. Таким образом, я сделал возврат вместо throw, я получил статус 200 (указывая, что все в порядке), но данные заголовка JSON:

{"Response": {"Version": {"_Major": 1, "_Minor": 1, "_Build": -1, "_Revision": -1}, "Content": null, "StatusCode": 405, "ReasonPhrase": "Метод не разрешен", "Заголовки": [], "RequestMessage": null, "IsSuccessStatusCode": false }, "Сообщение": "При обработке запроса HTTP возникла исключительная ситуация. См. Ответ HTTP возвращено свойством 'Response' этого исключения для деталей.", "Data": {}, "InnerException": null, "TargetSite": null, "StackTrace": null, "HelpLink": null, "Source": null, "HResult": -2146233088 }

Как вы можете видеть из кода в улове, я также пытаюсь сделать то же самое. Как вы возвращаете StatusCode с соответствующим информационным текстом звонящему, чтобы он мог проверить статус, а если его нет 200, проверить текст сообщения об ошибке?

Спасибо

1 ответ

Решение

Попробуйте вернуть ответ с нужным HttpStatusCode следующим образом:

catch (HttpResponseException e)
        {
            string error = e.ToString();
            return Content(HttpStatusCode.MethodNotAllowed, error);
        }
Другие вопросы по тегам