ASP.NET HttpContext
最后修改于 2023 年 10 月 18 日
在本文中,我们将展示如何在 ASP.NET 应用程序中通过 HttpContext 检索 HTTP 特定数据。
ASP.NET 是一个跨平台、高性能、开源的框架,用于构建现代、支持云的 Web 应用程序。它由 Microsoft 开发。
Minimal APIs 提供了一种创建具有最小依赖关系的 HTTP API 的方法。它们非常适合微服务和学习 Web 编程。使用 Minimal APIs,我们可以快速创建新的 Web 应用程序并测试我们的代码。
HttpContext 包含关于单个 HTTP 请求的所有 HTTP 特定信息。我们可以获取有关请求、响应、用户或会话的信息。
ASP.NET HttpContext 示例
以下示例使用 HttpContext 获取有关请求的一些信息。
$ dotnet new web --no-https -o HttpContextEx
我们创建一个新的 ASP.NET Web 应用程序。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/ctx", (HttpContext context) => context.Response.WriteAsync("HTTP Context\n"));
app.MapGet("/ctx2", (HttpContext context) =>
{
var method = context.Request.Method;
var host = context.Request.Host;
var ua = context.Request.Headers["User-Agent"];
context.Response.WriteAsync($"{method} {host} {ua}\n");
});
app.MapGet("/ctx3", (HttpContext context) =>
{
string name = context.Request.Query["name"];
string occupation = context.Request.Query["occupation"];
context.Response.WriteAsync($"{name} is a {occupation}\n");
});
app.Run("https://:3000");
我们映射了三个端点,并在其中使用了 HttpContext。
app.MapGet("/ctx", (HttpContext context) => context.Response.WriteAsync("HTTP Context\n"));
对于 /ctx 路径,我们只是使用 WriteAsync 将消息写回给客户端。
app.MapGet("/ctx2", (HttpContext context) =>
{
var method = context.Request.Method;
var host = context.Request.Host;
var ua = context.Request.Headers["User-Agent"];
context.Response.WriteAsync($"{method} {host} {ua}\n");
});
对于 /ctx2 路径,我们获取并检索请求方法、主机和 User-Agent 标头。我们使用这些信息构建消息并将其发送给客户端。
app.MapGet("/ctx3", (HttpContext context) =>
{
string name = context.Request.Query["name"];
string occupation = context.Request.Query["occupation"];
context.Response.WriteAsync($"{name} is a {occupation}\n");
});
第三种情况是,我们检索 GET 查询。
$ dotnet watch
我们启动应用程序。该应用程序监听端口 3000。我们将使用 curl 工具向我们的应用程序生成请求。
$ curl localhost:3000/ctx HTTP Context
我们为第一个 URL 生成一个 GET 请求。
$ curl localhost:3000/ctx2 GET localhost:3000 curl/7.81.0
我们向第二个 URL 发送一个 GET 请求。
$ curl 'localhost:3000/ctx3?name=John%20Doe&occupation=gardener' John Doe is a gardener
第三种情况,我们在 URL 中添加了一些查询数据。
ASP.NET HttpContext 示例 II
在第二个示例中,我们在控制器中使用 HttpContext。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.Run("https://:3000");
我们设置控制器。
using Microsoft.AspNetCore.Mvc;
public class HomeController : Controller
{
[HttpGet("/")]
[Produces("text/plain")]
public IActionResult Index()
{
string method = HttpContext.Request.Method;
string host = HttpContext.Request.Host.ToString();
string ua = HttpContext.Request.Headers["User-Agent"];
string msg = $"{method} {host} {ua}\n";
return Ok(msg);
}
}
对于主页,我们获取请求方法、主机和用户代理。该操作将纯文本消息返回给客户端。
string method = HttpContext.Request.Method;
HttpContext.Request.Method 返回请求方法。
$ dotnet watch
我们启动应用程序。
$ curl localhost:3000 GET localhost:3000 curl/7.81.0
我们为首页生成一个 GET 请求。
在本文中,我们使用了 HttpContext 来检索 HTTP 特定数据。