Возвращение кода ошибки из контроллера с помощью System.Web.Http - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть очень легкий 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)
{

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

return StatusCode(HttpStatusCode.MethodNotAllowed)

, состояние устанавливается на «405 Method Not Allowed», но я хотел быпередать текст, чтобы указать, почему это не удалось.Поэтому я попытался:

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}," Message ":" Обработка HTTP-запроса привела к исключению. Дополнительные сведения см. В ответе HTTP, возвращенном свойством 'Response' этого исключения.. "," Data ": {}," InnerException ": null," TargetSite ": null," StackTrace ": null," HelpLink ": null," Source ": null," HResult ": -2146233088}

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

Спасибо

1 Ответ

0 голосов
/ 12 декабря 2018

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

catch (HttpResponseException e)
        {
            string error = e.ToString();
            return Content(HttpStatusCode.MethodNotAllowed, error);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...