我想为ApiController创建扩展方法,以便能够返回自定义内容.
我的想法是用我自己的细节返回自定义错误.
我想返回类似于OAuthAuthorizationServerProvider返回的错误的自定义错误:
我的想法是用我自己的细节返回自定义错误.
我想返回类似于OAuthAuthorizationServerProvider返回的错误的自定义错误:
{ "error": "invalid_grant","error_description": "You have 3 more attempts before Your account will be locked." }
public IHttpActionResult test() { HttpError err = new HttpError(); err["error"] = "40001"; err["error_description"] = "Something is wrong"; var response = Request.CreateErrorResponse(HttpStatusCode.NotFound,err); return ResponseMessage(response); }
这给了我很好看的回应:
{ "error": "40001","error_description": "Somethis is wrong" }
我已经尝试将此转换为以下扩展方法:
public static class ApiControllerExtensions { public static IHttpActionResult BadRequest(this ApiController apiController,string error,string errorDetails) { HttpError err = new HttpError(); err["error"] = error; err["error_description"] = errorDetails; var response = apiController.Request.CreateErrorResponse(HttpStatusCode.NotFound,err); return apiController.ResponseMessage(response); } }
但是我收到错误:无法访问受保护的内部方法’ResponseMessage’
我知道我可以创建自定义基础ApiController并在那里添加该方法,但我想创建扩展方法,以便在其他项目中重用它更容易.
如何从ApiController扩展方法返回IHttpActionResult?
解决方法
我已经设法修复了我的扩展方法.而不是返回apiController.ResponseMessage(响应)我添加了返回new ResponseMessageResult(response)
以下是工作扩展方法:
public static class ApiControllerExtensions { public static IHttpActionResult InvalidRequest(this ApiController apiController,string errorDetails = "",ModelStateDictionary modelState = null) { var err = modelState != null ? new HttpError(modelState,false) : new HttpError(); if (err.ContainsKey("message")) err.Remove("message"); err["error"] = error; if (!string.IsNullOrWhiteSpace(errorDetails)) err["error_description"] = errorDetails; var response = apiController.Request.CreateErrorResponse(HttpStatusCode.BadRequest,err); return new ResponseMessageResult(response); } public static IHttpActionResult InvalidRequest(this ApiController apiController,ModelStateDictionary modelState = null) { return InvalidRequest(apiController,error,null,modelState); } }
和示例用法看起来像这样:
return this.InvalidRequest("error") return this.InvalidRequest("error","error details") var msd = new ModelStateDictionary(); msd.AddModelError("name","name not valid"); return this.InvalidRequest("error",msd); return this.InvalidRequest("error","details",msd);
返回JSON(400 Bad Request)看起来像这样:
{ "error": "error","modelState": { "name": [ "name not valid" ] },"error_description": "details" }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。