ApiController 扩展方法 - 无法访问 ResponseMessage

2023-12-19

我想为 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);
    }
}

但我收到错误:Cannot access protected internal method 'ResponseMessage' here

我知道我可以创建自定义基础 ApiController 并在其中添加该方法,但我想创建扩展方法,以便更容易在其他项目中重用它。

如何从 ApiController 扩展方法返回 IHttpActionResult?


我已经设法修复我的扩展方法。
代替return apiController.ResponseMessage(response)我已经添加return 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 错误请求)如下所示:

{
    "error": "error",
    "modelState": {
        "name": [
            "name not valid"
        ]
    },
"error_description": "details"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ApiController 扩展方法 - 无法访问 ResponseMessage 的相关文章

随机推荐

  • 在 Excel 中将 HEX 转换为 RGB

    我有一列 HEX 和三列 R G 和 B 如何将 HEX 转换为 RGB 例如ff0000 to R 255 G 0 and B 0 我知道前 2 个字符ff属于 R 接下来的200属于 G 最后的200属于 B 所以我必须使用 LEFT
  • Excel:将数组传递给用户定义函数 (VBA)

    编辑 解决方案 请参阅下面的原始问题 在将 1 2 3 这样的数组传递给 UDF 时 我发现需要考虑两件事 区域设置 请参阅答案 1 德国系统上的列表分隔符 通常 是 因此我需要使用 1 2 3 传递的数组在函数中显示为二维数组 因此 它的
  • Objective-C 类中的 Swift 协议

    I wrote SearcherProtocol在 Swift 中并且需要实现一个 Objective C 类FileSearcher必须使用这个协议 所以我尝试了这个 import
  • C++ 警告:“指针参数“arr”可以是指向 const 的指针”

    我有下面三个函数 我不确定为什么第二个和第三个函数在 arr 处有警告 但第一个函数没有 该警告是什么意思以及如何解决这个问题 IDE 克利翁2017 3 MinGW64 5 0 CMake 3 9 4 谢谢 int getFirstEve
  • Python:psycopg2.ProgrammingError:INSERT 的表达式多于目标列

    我是 python 新手 我似乎不明白为什么会出现这个错误 它告诉我参数太多 但表有 8 列 我向 它传递了 8 个参数 到底是怎么回事 这个错误是否会产生误导 真正的问题是我试图传递的值可能是None或者可以是类型Boolean usin
  • Swift 反射功能 - 如何获取实例变量名称?

    给定一个构造函数 例如 required init pTableName String pRecordKey String pStartAtRecord Int parameters append ChildElement identifi
  • 隐藏Referer(PHP、HTML、JS 无关紧要)

    我正在使用这样的东西 mysite com out php url outurl com 我只是使用一个简单的重定向 但我只是想知道如何隐藏引荐来源网址 Thanks 编辑 我最终进行了两次元刷新 引荐来源网址是由用户的浏览器附加的 而不是
  • 在应用程序购买 SKPaymentQueue finishTransaction 不起作用

    我正在 iOS sdk 中工作应用程序内购买项目 我已经准备好了应用程序内购买类 用于从应用程序商店购买应用程序 并启用项目的内部内容 但是 我的问题是 SKPaymentQueue 没有完成我的类的工作 这是我的应用程序内购买的代码班级
  • Spring Data中的多态查询

    我有一个基本抽象类 Entity Table name P FLD Inheritance strategy InheritanceType JOINED DiscriminatorColumn name FLD DISCRIMINATOR
  • 当应用程序被销毁时 PreferenceActivity 保存首选项

    我有一个 MainActivity 和一个从该 Activity 调用的 PreferenceActivity 我还运行了一个服务来查询这些首选项 当我打印这些值时 我明白了 D pref scrobble 4083 true D pref
  • Git 挂钩,通过提交进行接收后循环

    在服务器端使用 git hooks 是否可以在每次有人推送到远程存储库时循环从客户端发送到服务器的新提交消息 我需要从每条消息中提取信息 哈希 日期 提交作者 分支 我找不到任何关于 git hooks 的好的文档来解决这个问题 我已读完g
  • 保存和读取登录到钥匙串不工作 IOS swift

    Hello I have a log in view that uses face recognition to authenticate the user and If the user is authenticated it reads
  • 矢量图块缓冲区

    我在使用 Geoserver 提供的矢量切片设置 Openlayers 地图时遇到问题 线条沿着瓷砖的边缘拧在一起 看起来线条是先被剪裁 然后再设计样式 而不是相反 这使得宽线看起来很难看 更改 LOL 客户端中的渲染缓冲区不会产生任何影响
  • pandas dataframe groupby:仅正数的总和/计数

    我有一个数据框 框架 我想按国家和日期进行聚合 aggregated pd DataFrame frame groupby Country Date CaseID count aggregated Total duration frame
  • Git 子模块跟踪提交但知道分支?

    我正在一个项目中工作 我们使用 git 子模块来跟踪整个代码 一起发布的几个不同部分 所以我喜欢子模块跟踪特定提交的想法 因为子模块主要用于历史目的 这很好 这样将来人们就可以检查超级存储库的特定标签并找出每个组件的代码所在的位置 但是 如
  • 消息队列与任务队列的区别

    我想知道它们之间有什么区别 他们描述的是同一件事吗 是 Google App Engine 服务任务队列 https developers google com appengine docs java taskqueue overview是
  • 无法在 Excel for Mac 2016 中加载 macOS 连接器/MySQL ODBC 驱动程序

    我正在 High Sierra 10 13 6 上使用 Excel for Mac 版本 16 18 安装了适用于 macOS 的 Connector ODBC 8 0 12 使用 iODBC 数据源管理 64 位 测试了与我的数据库的连接
  • Xcode:添加项目作为构建依赖项

    我正在玩声音云API https github com soundcloud cocoa api wrapper tree oauth2 在其说明中说 将 SoundCloudAPI xcodeproj 拖到您的项目中 将其添加为构建依赖项
  • django(rest_framework)中的令牌身份验证不起作用

    标题基本概括了所有内容 我正在尝试使用令牌进行身份验证 我正在从 django 数据库获取信息到我的 flutter 应用程序 我已成功从rest framework 检索我的令牌并将其添加到其余请求的标头中 我在 django 中打印了这
  • ApiController 扩展方法 - 无法访问 ResponseMessage

    我想为 ApiController 创建扩展方法以便能够返回自定义内容 我的想法是用我自己的详细信息返回自定义错误 我想返回类似于返回的错误的自定义错误OAuthAuthorizationServerProvider error inval