.net6 webapi获取Request.UrlReferrer,添加在program里面,判断 UrlReferrer是否等于aaa,不等于的话断开连接,给出范例
时间: 2024-10-24 19:11:22 浏览: 12
在 .NET 6 的 ASP.NET Core Web API 中,你可以使用 `HttpRequest` 对象来访问客户端发送来的请求信息,包括 `UrlReferrer`(来源URL)。以下是如何在 `Program.cs` 的 `Startup` 方法中获取并检查 `UrlReferrer` 是否为 "aaa",如果不是则返回一个错误响应并关闭连接:
```csharp
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
// 注册依赖注入
services.AddControllers();
// 如果你想在每个请求处理前检查 URL Referrer
services.AddUseRequestToCheckreferrer();
});
private static void AddUseRequestToCheckreferrer(IServiceCollection services)
{
services.AddHttpContextAccessor();
// 创建 middleware 来处理请求和检查 referrer
services.AddMiddleware<CheckReferrerMiddleware>();
}
}
public class CheckReferrerMiddleware
{
private readonly RequestDelegate _next;
private readonly IHttpContextAccessor _httpContextAccessor;
public CheckReferrerMiddleware(RequestDelegate next, IHttpContextAccessor httpContextAccessor)
{
_next = next;
_httpContextAccessor = httpContextAccessor;
}
public async Task InvokeAsync(HttpContext context)
{
if (ShouldTerminate(context.Request.Headers["Referer"] ?? ""))
{
await context.Response.WriteAsync("Referrer is not 'aaa'. Connection closed.");
context.Response.StatusCode = StatusCodes.Status403.Forbidden; // 设置状态码
await context.Response.End(); // 停止进一步处理
}
else
{
await _next.Invoke(context);
}
}
private bool ShouldTerminate(string referrer)
{
return !string.IsNullOrEmpty(referrer) && referrer != "aaa";
}
}
```
在这个例子中,我们首先创建了一个名为 `CheckReferrerMiddleware` 的中间件,它会在每次请求到达控制器之前检查 `UrlReferrer`。如果 `UrlReferrer` 不等于 "aaa",它会写一个错误消息到响应,并设置 `403 Forbidden` 状态码来终止连接。
要启用这个中间件,请确保在 `ConfigureServices` 部分注册了 `AddUseRequestToCheckreferrer`。然后,当运行应用程序时,这个中间件就会按顺序执行。
阅读全文