OutSystems开发实践:OutSystems获取请求头信息,今天在用OutSystems实现一个日志记录功能时,需要保存相关请求的请求头信息用于日志分析,那么OutSystems获取请求头信息是如何做的呢?在开始这个话题之前,有过C# asp.net webform时代的开发经验的开发者,或者熟悉现代 .net core网站/接口开发的人员,对于这个功能来说,简直so easy.
OutSystems获取请求头信息
OutSystems是一个低代码开发平台,如果你有.net开发的经验,熟悉之后会感觉用起来还是不错的,很节约开发时间,基本上拖拖拽拽就可以开发出一个app/site出来了。不过涉及到深入一点的功能,还是需要懂原生的开发的,因为那样你可以用C# 为OutSystems写一些扩展来增强OutSystems的功能。
不过今天我们不需要自己写扩展来实现,因为可以在OutSystems的forge里面找到现成的组件直接使用即可,我们来看看吧。
首先安装HTTP Headers这个扩展,直接在Forge里面搜索 HTTP Headers,如下图所示:
接下来选中HTTP Headers,然后点击它,出现下面这个图,然后安装即可,安装完毕,就可以在OutSystems里面添加引用,然后拖进来就可以使用了。
添加引用后,直接鼠标选中该Action,拖到设计区域即可使用。如下图所示:
该扩展包含了以下3个基本的Action,用于从当前 Web 请求中检索 HTTP 标头的扩展。
包括:
- GetAllHeaders
- 返回名称/值对中的所有 HTTP 标头
- GetHeaderValue
- 返回与给定名称匹配的第一个 HTTP 标头值
- GetHeaderValues
- 返回与给定名称匹配的所有 HTTP 标头值
参考链接:https://www.outsystems.com/forums/discussion/47224/get-header-values-from-the-rest-request/
是不是很简单呢?那我们来回味一下asp.net webform时代是如何获取请求头的。
asp.net webform怎样获取所有的请求头信息?
在 ASP.NET WebForms 中,可以使用 HttpContext.Current.Request.Headers
获取所有的请求头信息。以下是一个简单的代码示例:
在代码后置文件中(.aspx.cs)
using System; using System.Collections.Specialized; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // 获取所有的请求头信息 NameValueCollection headers = Request.Headers; foreach (string key in headers.AllKeys) { string[] values = headers.GetValues(key); if (values != null) { foreach (string value in values) { Response.Write($"{key}: {value}<br />"); } } } } }
在 ASPX 文件中
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html> <head> <title>Request Headers</title> </head> <body> <form id="form1" runat="server"> <div> <!-- 请求头信息将在这里显示,https://jhrs.com 首发 --> </div> </form> </body> </html>
解释
- 获取请求头:使用
Request.Headers
获取所有请求头信息。 - 遍历并输出请求头:遍历
Headers
集合中的所有键值对,并将其输出到响应中。
通过这种方法,可以在 ASP.NET WebForms 中获取并显示所有的请求头信息。
asp.net core API中如何获取请求头信息?
在 ASP.NET Core 中,可以通过 HttpContext.Request.Headers
获取所有的请求头信息。以下是一个简单的示例,展示了如何在控制器中获取和显示请求头信息:
创建一个控制器
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System.Linq; namespace YourNamespace.Controllers { [ApiController] [Route("[controller]")] public class HeadersController : ControllerBase { private readonly ILogger<HeadersController> _logger; public HeadersController(ILogger<HeadersController> logger) { _logger = logger; } [HttpGet] public IActionResult GetHeaders() { var headers = Request.Headers.Select(h => $"{h.Key}: {string.Join(", ", h.Value)}"); return Ok(string.Join("\n", headers)); } } }
解释
- 控制器:创建一个名为
HeadersController
的控制器,定义一个 GET 方法GetHeaders
。 - 获取请求头:通过
Request.Headers
获取所有请求头,并将其格式化为键值对字符串。 - 返回结果:将所有请求头信息作为字符串返回。
通过这个示例,当你访问 https://jhrs.com/headers
时,服务器会返回所有的请求头信息。
asp.net core razor pages里面怎样获取所有的请求头信息?
在 ASP.NET Core Razor Pages 中,可以通过 HttpContext.Request.Headers
获取所有的请求头信息。以下是一个完整的示例,展示了如何在 Razor Page 中获取和显示请求头信息:
在 Razor Page 的代码后置文件中
首先,在 Razor Page 的代码后置文件(.cshtml.cs
)中添加以下代码:
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; using System.Collections.Generic; using System.Linq; namespace YourNamespace.Pages { public class HeadersModel : PageModel { private readonly ILogger<HeadersModel> _logger; public HeadersModel(ILogger<HeadersModel> logger) { _logger = logger; } public Dictionary<string, string> RequestHeaders { get; private set; } public void OnGet() { RequestHeaders = Request.Headers.ToDictionary(h => h.Key, h => string.Join(", ", h.Value)); } } }
在 Razor Page 的视图文件中
然后,在 Razor Page 的视图文件(.cshtml
)中添加以下代码:
@page @model YourNamespace.Pages.HeadersModel @{ ViewData["Title"] = "Request Headers"; } <h2>Request Headers</h2> <table class="table"> <thead> <tr> <th>Header</th> <th>Value</th> </tr> </thead> <tbody> @foreach (var header in Model.RequestHeaders) { <tr> <td>@header.Key</td> <td>@header.Value</td> </tr> } </tbody> </table>
解释
- 代码后置文件:
- 创建
HeadersModel
类,继承自PageModel
。 - 在
OnGet
方法中,获取请求头信息并存储在RequestHeaders
字典中。
- 创建
- 视图文件:
- 在视图文件中,遍历
RequestHeaders
字典并将其显示在表格中。
- 在视图文件中,遍历
通过这种方法,可以在 ASP.NET Core Razor Pages 中获取并显示所有的请求头信息。