使用System.Web.Http从控制器返回错误代码

时间:2018-12-11 21:44:46

标签: c# rest controller system.web.http

我有一个非常轻巧的REST API,该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方法”,但我想传递一些文本以指示失败的原因。所以我尝试了:

throw new HttpResponseException(HttpStatusCode.MethodNotAllowed);

,这只是在我的控件中停止执行。所以我做了一个返回而不是抛出,我得到的状态是200(表明一切都很好),但是JSON标头数据是

  
    

{         “响应”:{             “版本”:{                 “ _Major”:1                 “ _Minor”:1                 “ _Build”:-1,                 “ _Revision”:-1             },             “内容”:null,             “状态代码”:405,             “ ReasonPhrase”:“不允许使用方法”,             “标题”:[],             “ RequestMessage”:null,             “ IsSuccessStatusCode”:否         },         “消息”:“ HTTP请求的处理导致异常。请查看“响应”返回的HTTP响应     有关详细信息,请参见此异常的属性。”,         “数据”:{},         “ InnerException”:null,         “ TargetSite”:null,         “ StackTrace”:null,         “ HelpLink”:null,         “来源”:null,         “ HResult”:-2146233088}

  

从捕获代码中可以看到,我也在尝试做相同类型的事情。您如何将带有相应信息文本的StatusCode返回给调用方,以便他们可以检查状态,如果不是200,请检查正文中是否有错误文本?

谢谢

1 个答案:

答案 0 :(得分:1)

尝试返回带有所需HttpStatusCode的内容响应,如下所示:

Aero