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

Returning Error Code from Controller with System.Web.Http

我编写了一个非常轻量级的 REST API 来验证用户。我想 return 将验证作为 JSON object,我可以这样做,但是如果缺少参数,我想用一些信息来回击错误。这是我的控制器

    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 object 返回。但是,当我在检查 IsNullOrEmpty 时试图 return 向用户发送错误时,如果我只是用 PostMan 调用:

return StatusCode(HttpStatusCode.MethodNotAllowed)

状态设置为“405 方法不允许”,但我想传递一些文本来说明失败的原因。所以我尝试了:

throw new HttpResponseException(HttpStatusCode.MethodNotAllowed);

这只是在我的控制下停止执行。所以我做了一个 return 而不是抛出 我得到 200 的状态(表示一切正常)但是 JSON header 数据:

{ "Response": { "Version": { "_Major": 1, "_Minor": 1, "_Build": -1, "_Revision": -1 }, "Content": null, "StatusCode": 405, "ReasonPhrase": "Method Not Allowed", "Headers": [], "RequestMessage": null, "IsSuccessStatusCode": false }, "Message": "Processing of the HTTP request resulted in an exception. Please see the HTTP response returned by the 'Response' property of this exception for details.", "Data": {}, "InnerException": null, "TargetSite": null, "StackTrace": null, "HelpLink": null, "Source": null, "HResult": -2146233088 }

正如您从 catch 中的代码中看到的那样,我也在尝试做相同类型的事情。您如何 return 将带有相应信息文本的 StatusCode 发送给调用者,以便他们可以检查状态,如果不是 200,请检查 body 中的错误文本?

谢谢

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

catch (HttpResponseException e)
        {
            string error = e.ToString();
            return Content(HttpStatusCode.MethodNotAllowed, error);
        }