Возвращение кода ошибки из контроллера с помощью 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);
}