Asp.net 5 Web api返回状态代码和正文

2024-02-06

我正在使用 ASP.NET 5 开发一个项目,并且正在编写一个 Web api。

我继承了一些代码和数据库存储过程,它们使用 raiserror 来指示出现问题(用户名/密码不正确、许可证过期等)。

除了消息文本之外,存储过程不返回任何内容来唯一标识该错误。

我希望能够返回 HTTP UNAUTHORIZED 响应,但也将错误消息传递给客户端。

内置的IActionResult HttpUnauthorized()方法不允许给出理由。

所以我编写了自己的 ActionResult,如下所示:

public class UnauthorizedWithMessageResult : IActionResult
{
    private readonly string _message;

    public UnauthorizedWithMessageResult(string message)
    {
        _message = message;
    }

    public async Task ExecuteResultAsync(ActionContext context)
    {
        using (var sw = new HttpResponseStreamWriter(context.HttpContext.Response.Body, Encoding.UTF8))
        {
            await sw.WriteLineAsync(_message);
        }

        await new HttpUnauthorizedResult().ExecuteResultAsync(context);
    }
}

问题是客户端收到 200-OK,就像一切都很好一样。

我已经完成了这个任务,并在代表团之后HttpUnauthorizedResult完成后,状态码确实设置为403。

看起来 Web API(在某些时候)看到响应正文中有内​​容,并决定这意味着一切正常并重置状态代码。

有没有什么方法可以解决这个问题,而不必将消息作为标头或其他内容发送? (或者这是正确的方法吗?)


你可以这样做:

return new ObjectResult("The message") { 
    StatusCode = (int?) HttpStatusCode.Unauthorized 
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Asp.net 5 Web api返回状态代码和正文 的相关文章

  • 在 LINQ 查询中进行转换

    是否可以在 LINQ 查询中进行强制转换 为了编译器的缘故 下面的代码并不糟糕 但最好将其放入一个查询中 Content content dataStore RootControl as Controls Content List
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 并行运行多个任务

    我有一个代理列表 每个代理都会访问不同的站点并从站点中提取所需的数据 目前它一次只做一个 但我希望同时运行 10 20 个任务 这样它就可以一次性从 20 个站点下载 而不是只下载一个 这是我目前正在做的事情 private async T
  • 无法在 CUDA 中找到 1 到 100 数字的简单和?

    我正在研究使用 CUDA 的图像处理算法 在我的算法中 我想使用 CUDA 内核找到图像所有像素的总和 所以我在cuda中制作了内核方法 来测量16位灰度图像的所有像素的总和 但我得到了错误的答案 所以我在cuda中编写了一个简单的程序来查
  • 使用 POST 的 HttpWebRequest 的性能

    我有一个用于测试网络服务的小工具 它可以使用 POST 或 GET 调用 Web 服务 使用POST的代码是 public void PerformRequest WebRequest webRequest WebRequest Creat
  • 如何从经过身份验证的 SecurityToken 中获取声明

    我将令牌作为字符串传递到 SOAP 服务中 并验证了该令牌是否有效 我现在有一个 SecurityToken 在调试模式下我可以看到所有声明 特别是我想传递到另一个方法的 userId 声明 我似乎不知道如何获得这些索赔 现在 我解码了令牌
  • 维护 VS Test Project 中单元测试方法之间的上下文

    我想按顺序运行以下单元测试 使用随机数字的名称 密码等创建新客户 检索刚刚创建的客户并断言其属性包含相同的随机数 对同一用户调用 ForgotPassword 函数 并使用相同的随机数作为用户名 清楚地看到 我需要生成一次随机数 并在 3
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width
  • X 轴和 Z 轴上的 Quaternion.Slerp,无 Y 轴

    I am trying to rotate the Player about X Y and Z axis The Y axis should not move from last angle Example if I rotate 45
  • DateTime.ParseExact - 为什么 yy 变成 2015 而不是 1915

    为什么 NET 假定以下年份是 2015 年 而不是 1915 年 var d DateTime ParseExact 20 11 15 dd MM yy new CultureInfo en GB 我想 它会尝试接近 但其背后是否有合理的
  • 如何在 C++ 中正确使用 cin.fail()

    我正在编写一个程序 从用户那里获取整数输入cin gt gt iUserSel 如果用户输入一个字母 程序就会进入无限循环 我试图用下面的代码来阻止这种情况 但程序进入无限循环并打印出 错误 输入 我该如何修复我的程序 cin gt gt
  • 使用任一默认捕获模式时,这是通过复制捕获还是 (*this) 通过引用捕获?是一样的吗?

    当我看到以下工作时我有点困惑 struct A void g void f g 但后来我发现this https stackoverflow com a 16323119 5825294答案非常详细地解释了它是如何工作的 本质上 它归结为t
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • fgets溢出后如何清除输入缓冲区?

    当输入字符串超出其预定义限制时 我遇到了 fgets 的小问题 以下面的例子为例 for index 0 index lt max index printf Enter the d string index 1 if fgets input
  • Clang 5.0 上的 vsprintf 和 vsnprintf [-Wformat-nonliteral] 警告

    我有这段代码 static void err doit int errnoflag int level const char fmt va list ap int errno save unsigned long n char buf MA
  • C# 多维数组解析

    我有一个多维数组 内容在调试器中看起来像这样 数组设置为 String s new String 6 4 A B Yes C A B Yes C A B No C A B Yes C A B Yes C A B Yes C A B No C
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • 尝试后终于没有被调用

    由于某种原因 在我的控制台应用程序中 我无法运行我的finally 块 我编写这段代码是为了测试finally块是如何工作的 所以它非常简单 static void Main int i 0 try int j 1 i Generate a
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que
  • Adobe Illustrator 中的折线简化如何工作?

    我正在开发一个记录笔划的应用程序 您可以使用定点设备来绘制笔划 在上图中 我绘制了一个笔划 其中包含 453 个数据点 我的目标是大幅减少数据点的数量 同时仍然保持原始笔画的形状 对于那些感兴趣的人 上图笔画的坐标可以作为GitHub 上的

随机推荐

  • 回车换行 Windows 和 Linux java 应用程序

    我正在开发一个集成测试应用程序 这就是我在测试用例中所做的事情 我读取了一个测试输入文件 该文件存储在 cvs 中 将其写入文件系统中的文件 应用程序轮询该文件的目录 处理它并创建输出文件 然后我轮询输出文件的目录 如果两个文件内容相等 则
  • 非 WSDL 模式下的 SOAP 问题

    我正在制作一个简单的网络服务 用于我拥有的两个网站之间的通信 由于它只是一个基本应用程序 我一直在没有 WSDL 文件的情况下工作 所以在non WSDL mode正如 PHP 手册所称 这基本上就是客户端的样子 client new So
  • ASP Response.Flush() 刷新部分数据

    我正在开发一个带有 ASP 服务器端的 Web 应用程序 并使用 iframe 进行数据推送 ASP 处理程序每 隔一段时间就会将一些 javascript 刷新到 iframe context Response Write context
  • 字符串是如何排序的?

    有人可以解释一下以下函数的输出 public static void main String args String str1 new String 20 String str2 new String 100 List
  • 派生重载运算符,但仅对相同类型进行操作

    假设我有一个基类和两个从它派生的类 class Base protected double value public virtual Base Base double value value value Base const Base B
  • 无法设置未定义的属性“clientMutationId”

    我收到以下错误 当尝试通过 graphiql 运行突变时 请帮助我解决此问题或指向一个链接 我可以在其中找到反应中继突变示例 mutation createUser input username Hamza Khan clientMutat
  • pylint 为可调用的对象属性提供不可调用错误

    不确定我是否做错了什么或者这是否是一个问题pylint 在下面的代码中我得到一个 linting 错误self type不可调用E1102 虽然我可以忽略它并继续工作 但似乎这种事情应该很容易解决 只是不知道如何解决它 from typin
  • 使用正则表达式进行全字匹配

    我想要一个匹配 bananas 或 睡衣 但不匹配 bananas2 或 bananaspajamas 或 banana 或基本上除了这两个单词之外的任何内容的C 正则表达式 所以我这样做了 include
  • 在golang中传输一个大文件

    客户端发送文件 大小可能大于5G 发送到从服务器 然后从服务器发送到主服务器 从属设备会将临时文件保存到自身吗 我不希望发生这种情况 因为它会减慢上传速度并浪费从站的内存 有什么办法可以避免这种情况吗 在 golang 中传输大文件的最佳方
  • 将 DOM 操作应用于 HTML 并保存结果?

    我有大约 100 个静态 HTML 页面 我想对其应用一些 DOM 操作 它们都遵循相同的 HTML 结构 我想对每个文件应用一些 DOM 操作 然后保存生成的 HTML 这些是我想要应用的操作 start h1 title h2 desc
  • [Flags] Enum 属性在 C# 中意味着什么?

    我有时会看到如下的枚举 Flags public enum Options None 0 Option1 1 Option2 2 Option3 4 Option4 8 我不明白到底是什么 Flags 属性确实如此 有人可以发布一个很好的解
  • 在 Delphi 中创建可访问的 UI 组件

    我正在尝试从标准 VCL TEdit 控件检索可访问的信息 get accName 和 Get accDescription 方法返回空字符串 但 get accValue 返回输入到 TEdit 中的文本值 我刚刚开始尝试理解 MSAA
  • 如何在 Drupal 8 主题中添加 javascript 库?

    我正在尝试包含一个自定义 javascript 文件来操作我正在构建的 Drupal 8 主题中的菜单 我按照 Drupal 8 主题指南中的说明进行操作 将其包含在我的 info yml 文件中 js libraries librarie
  • 尝试第一个日志语句时,Boost Log 会导致崩溃(当不是管理员时)

    我现在正在尝试部署我的应用程序 它使用 Boost Log Boost 1 58 它是一个简单的控制台应用程序 在 Windows 7 中运行 日志记录在我的个人桌面上运行得非常好 但是 当我将应用程序部署到 Win7 虚拟机时 它在我的第
  • ZF2如何监听特定控制器的调度事件

    如何监听特定控制器的调度事件 目前我执行以下操作 模块 php public function onBootstrap EventInterface event application event gt getApplication eve
  • JavaFX:在 .FXML 文件中嵌入编码图像

    我想将编码图像嵌入到 FXML 中 我需要这个 因为我正在编写 svg 和 fxml 之间的转换器 我尝试过这个
  • F# 的编译器是用哪种语言编写的?

    F 的编译器是用哪种语言编写的 我听说 F 的编译器是用 F 编写的 F 编译器的每个下一个版本都是在其先前版本的基础上编写的 But 1 无法谷歌是否属实 2 如果属实 F 编译器的第一个版本是用哪种语言编写的 F 编译器是用 F 编写的
  • 热重载不适用于我的 webpack 5 反应项目

    我正在创建一个新项目 当我完成安装 npm 包并运行基本设置时 一切正常 除了当我在代码中进行更改并保存文件并移动到浏览器以查看更改时 页面没有在浏览器中重新加载 我必须手动刷新页面才能看到新的更改 这是我的 package json 文件
  • 如何在 sqlite 中构造我的查询?

    我想检索今天的数据 目前我有类似的东西SELECT FROM myTable WHERE timeStamp gt DATETIME NOW 1 DAY 但这给了我从现在到 24 小时前的结果 而不仅仅是今天 即无论自 00 00 以来已经
  • Asp.net 5 Web api返回状态代码和正文

    我正在使用 ASP NET 5 开发一个项目 并且正在编写一个 Web api 我继承了一些代码和数据库存储过程 它们使用 raiserror 来指示出现问题 用户名 密码不正确 许可证过期等 除了消息文本之外 存储过程不返回任何内容来唯一