如何在 azure 函数中访问 http 请求的所有字段(在 C# 中解析 JSON)?

2023-12-26

microsoft azure 对我来说是一个全新的编程主题。 编程基础语言是C#。 我必须使用逻辑应用程序中的 Azure Funtion Http 触发器(当新电子邮件到达时)。 我将日志应用程序中收到的电子邮件中的所有可能数据提供给 到天蓝色的函数调用。

然后我首先遇到的问题是 HttpRequest req 无法请求任何内容(没有数据)。

我发现 C# .NetCore3.1 在 JSON-Object 方面存在问题并返回空对象。 然后我使用 .NetCore2.1 构建项目,并且它正常工作。 我得到正确的信息,例如req.Host在这样的调用之后我在数据中看到了一个有效的 JSON 对象

string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);

但我不知道如何解析 JSON 对象中的数据,例如(来自、到、主题、内容、附件......)。

我尝试了很多发现的样本,但我不喜欢任何有效的方法,例如获取空值,异常,..

请有人在这里发布一个适用于使用 VS2017/2019 .NetCore2.1 编译的 azure 函数的小代码片段。

另一个问题是最终有办法直接从 http 请求获取 MimeMessage-obj 吗? 然后我可以直接从该对象获取信息,但可以帮助我解决这两种解决方案之一 哪里都好。

否则,我会自己拆分 JSON 结构,以一种非常尴尬的方式获取信息。 所以我希望有人能帮助我。

        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
        log.LogInformation($" host   : {req.Host}");

        string name = req.Query["name"];
        // read the contents of the posted data into a string
        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

        // use Json.NET to deserialize the posted JSON into a C# dynamic object
        dynamic data = JsonConvert.DeserializeObject(requestBody);

        name = name ?? data?.name;

例如,我有这样一个 Json 内容(在 dtaa 中这两行代码之后):

string requestBody = wait new StreamReader(req.Body).ReadToEndAsync(); 动态数据 = JsonConvert.DeserializeObject(requestBody);

Json-Content 用于解析简短的电子邮件(其他请求可能会因更多或更少的参数(字段)而有所不同)

{ {
        "Conversion Id": "AAQkADRmZDAwMTMwLTI3MTMtNGI0Ny1iMzFiLTQzYWJiZDY0YWI1ZQAQAE2OZM06t0uQqpd9MuONKNQ=",
        "From": "[email protected] /cdn-cgi/l/email-protection",
        "Has Attachment": false,
        "Internet Message Id": "<AM0PR07MB44178000A0B37882D6BC01D99ACC0@AM0PR07MB4417.eurprd07.prod.outlook.com>",
        "Is Html": false,
        "Is rRad": false,
        "Message Id": "AAMkADRmZDAwMTMwLTI3MTMtNGI0Ny1iMzFiLTQzYWJiZDY0YWI1ZQBGAAAAAAAvlJZPJxnGS4f6YWxh7zGsBwBnLziSnuG8R6h5C2SVmlYlAAHViSWpAACAWl3JfUo4SI7D5g-MgfEiAAJiPJQeAAA=",
        "Received Time": "2020-12-09T14:05:06+00:00",
        "Subject": "test1",
        "To": "[email protected] /cdn-cgi/l/email-protection",
        "emailBody": "1234\r\n",
        "importance": "normal"
    }
}

对于这个需求,您需要在函数代码中创建一个内部类来将请求体解析为对象。请参考我下面的代码:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace FunctionApp2
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            //dynamic data = JsonConvert.DeserializeObject(requestBody);
            EmailItem data = JsonConvert.DeserializeObject<EmailItem>(requestBody);

            log.LogInformation(data.From);
            log.LogInformation(data.Has_Attachment.ToString());

            return new OkObjectResult("completed");
        }
    }

    public class EmailItem
    {
        public string From { get; set; }

        public Boolean Has_Attachment { get; set; }

        //Add other fields which you want, please note add all of the fields which your request may contains in this inner class.
    }
}

正如你提到的other request could differn in more ore lesser paramters(fields),因此请添加您的请求中可能包含的所有字段EmailItem class.

顺便说一下,我上面提供的代码是根据您的要求使用.net core 2.1进行测试的。但我认为代码也可以在.net core 3.1中工作

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

如何在 azure 函数中访问 http 请求的所有字段(在 C# 中解析 JSON)? 的相关文章

随机推荐

  • 将 excel 时间导入 Pandas(带小数秒)

    我有一个包含时间列的 Excel 电子表格 xls 时间在 Excel 中显示为分钟 秒 十分之一秒 例如 50 59 2 50 59 4 原始数据包含小时 分钟 秒 十进制秒 当我将数据导入 pandas 时 我损失了十分之一秒 inda
  • Android 导航组件活动意图标志

    我已经创建了从片段到活动的导航操作 但我无法清除后堆栈 当我执行从片段到新活动的导航操作并按下后退按钮时 我将返回到上一个活动和上一个片段 我无法使用导航图设置意图标志来从返回堆栈中清除先前的活动
  • 从组件的“style”属性中获取 CSS 属性值

    我正在为一个库编写一个 React Native 组件 我希望用户能够使用style财产 就像React View和其他内置组件 但是 由于我的组件实际上是由一些嵌套视图组成的 因此我需要进行一些计算来确定要在组件上放置什么样式inner那
  • 使用帧检测标记的增强现实视频播放

    我想在使用网络摄像头检测到标记 HIRO 时播放视频 当我删除它时 它应该暂停 当检测到标记时 视频应该使用 A 框架播放 我已经编写了代码 但它不起作用 谁能帮我 我尝试了所有可能的方法 但它不起作用 所以任何人都可以发布代码或发送示例
  • C# 或 VB.NET - 迭代所有公共枚举

    我们的源代码中有一个通用组件 其中包含非常大的应用程序的所有枚举 大约 300 个 有没有什么方法可以使用 C 或 VB NET 来遍历所有这些 以便对每一个执行操作 问题如何迭代 net 类中的所有 公共字符串 属性 https stac
  • Azure 逻辑应用、SQL 更新行 v2

    我正在尝试添加一个额外的任务来在通过 sendgrid 发送电子邮件后更新 SQL Server 中的行 用于更新行的选项似乎缺少列名称和值 唯一可以添加的附加参数称为 原始输入 该参数不在 MS 文档中 完成可用字段并运行该进程 它可以正
  • 如何在无线设置中添加 return=true [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在做一个项目 但我卡住了 我想要的是启用 wifi 或互联网后 后退按钮 硬件按钮 应该让我回到SplitScreen xml不要关闭应
  • 使用 ndk-build 构建 android 共享库,无需 jni 文件夹

    仅当我的所有 src 都在 jni foler 中时 我才能使用 ndk build 构建一个 android 共享库 但是 我想使用 ndk build 构建一个共享库而不需要 jni 文件夹 因为我的项目没有java代码 那么我该怎么做
  • 字典为相同的键添加值

    我有一个字典列表 name Jay value 1 name roc value 9 name Jay value 7 name roc value 2 我希望它是 name Jay value 8 name roc value 11 我尝
  • 从Artifactory下载依赖项时npm错误403

    我正在尝试使用 Node js 项目运行作业 步骤之一是rtnpminstall它运行npm install命令 这rtnpminstall命令由 Jenkins 上的 Artifactory 插件运行 错误说 npm ERR code E
  • 如何在 Swift 中以编程方式将 HeaderView 从 nib 添加到 UiTableView

    好吧 我是一个使用 swift 语言的天真的 IOS 开发人员 我有一个显示酒店功能列表的表格视图 现在我想在表格视图中添加标题信息 其中包含酒店图像 酒店名称位于表格视图上方 以便标题信息也随着表格视图内容滚动 产品功能列表 问题是 带有
  • 如何在 Rust 中正确包装 C 函数指针? [复制]

    这个问题在这里已经有答案了 我有一个 C 结构体Foo带有函数指针 在我的 Rust 绑定中 我希望允许用户设置此函数指针 但我希望避免用户必须处理 FFI 类型 foo h struct Foo void internal uint8 t
  • NSTextView 的 insertText 方法在 OS X v10.11 中已弃用。替代品是什么?

    我在 AppKit API 参考中看到insertTextOS X v10 11 中已弃用该方法 我应该用什么来代替 文档说 void insertText id aString 该方法是用户输入文本的方法NSTextView 请参阅NSI
  • 对 UITextView 应用字数限制

    如何在 Objective C interface builder 中对 UITextView 应用字数限制 我已经搜索了一段时间 发现了字符数 但没有找到字数 有谁能给我指点一下吗 您可以只计算空格数并对其进行限制 这是一个 hack 但
  • 如何在 WP7 上挂钩硬件搜索按钮

    我有一个带有搜索页面的 WP7 应用程序 我更愿意挂钩硬件搜索按钮 而不是必须将搜索图标添加到菜单栏 有谁知道如何做到这一点 当前版本中的第三方应用程序无法使用硬件搜索按钮 请参考此线程已回答类似问题 https stackoverflow
  • PPP 或以太网如何从错误中恢复?

    查看数据链路级标准 例如 PPP通用帧格式 http www tcpipguide com free t PPPGeneralFrameFormat htm or Ethernet http en wikipedia org wiki Et
  • @Input 属性的可观察值

    我从带有复选框输入的数组中选择了一些值 如本例所示 Visit http plnkr co edit N9NXBYcwhon6ITr8RP5y p preview 但我想使用输入装饰器将检查的数组数据传递给另一个组件 如何使已检查的数据成为
  • 具有不完整链的 SSL 证书通过了 .NET Core 2.2 中的验证

    使用 NET Core 2 2 我需要重新创建不完整链 SSL 错误 但是 ServerCertificateValidationCallback 为我提供了与我预期不同的证书链 并且这些证书通过了验证 有人可以解释这里出了什么问题吗 调用
  • 从页面或应用程序发布到 Facebook 用户的留言墙上

    我可以让用户授权我的应用程序 然后我可以使用以下代码在他们的墙上发布 new Facebook facebook gt api uid feed post array message gt My app says hi 这可行 但出现在用户
  • 如何在 azure 函数中访问 http 请求的所有字段(在 C# 中解析 JSON)?

    microsoft azure 对我来说是一个全新的编程主题 编程基础语言是C 我必须使用逻辑应用程序中的 Azure Funtion Http 触发器 当新电子邮件到达时 我将日志应用程序中收到的电子邮件中的所有可能数据提供给 到天蓝色的