c# – ApiController扩展方法 – 无法访问ResponseMessage
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – ApiController扩展方法 – 无法访问ResponseMessage,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2628字,纯文字阅读大概需要4分钟。
内容图文
![c# – ApiController扩展方法 – 无法访问ResponseMessage](/upload/InfoBanner/zyjiaocheng/767/79a9ebbf6cbd487daa8172efd49b96b4.jpg)
我想为ApiController创建扩展方法,以便能够返回自定义内容.
我的想法是用我自己的细节返回自定义错误.
我想返回类似于OAuthAuthorizationServerProvider返回的错误的自定义错误:
{
"error": "invalid_grant",
"error_description": "You have 3 more attempts before Your account will be locked."
}
在我的ApiController里面我添加了这个方法:
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 error, 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, string error, 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"
}
内容总结
以上是互联网集市为您收集整理的c# – ApiController扩展方法 – 无法访问ResponseMessage全部内容,希望文章能够帮你解决c# – ApiController扩展方法 – 无法访问ResponseMessage所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。