【问题标题】:c# Minimal API .NET 6.0, how to get the client ip?c# Minimal API .NET 6.0,如何获取客户端ip?
【发布时间】:2022-07-27 00:53:44
【问题描述】:

我使用来自 microsoft https://docs.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-6.0 的这个链接来创建我的 web api。

之后,我像这样添加数据库:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<Context>(opt => opt.UseSqlServer(
    builder.Configuration.GetConnectionString("Default")
));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
var app = builder.Build();

而我的功能是这样的:

app.MapGet("/SomeRoute/{data}", async (long data, Context appDb) =>
{    
    var tabladata = await appDb.Table1
        .Where(some code here)
        .ToListAsync();
    return Results.Ok(tabladata);
});

我发现我可以使用以下代码获取 IP 客户端: 在 var app = builder.Build(); 之前添加这个

builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});

之后:

app.UseForwardedHeaders();

最后是这样的:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<Context>(opt => opt.UseSqlServer(
    builder.Configuration.GetConnectionString("Default")
));
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});

builder.Services.AddDatabaseDeveloperPageExceptionFilter();
var app = builder.Build();
app.UseForwardedHeaders();

如何获取调用 web api 函数的 IP 客户端?

谢谢。

【问题讨论】:

    标签: c# asp.net minimal-apis


    【解决方案1】:

    找到了解决办法。 这里:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-context?view=aspnetcore-6.0

    他们告诉您如何在“使用最小 API 中的 HttpContext”标题下获取 HTTPContext。你只需要添加参数就可以了,我不知道为什么,但是如果你把它放在那里你就会得到参数。

    app.MapGet("/", (HttpContext context) => context.Response.WriteAsync("Hello World"));
    

    之后,在此页面中:https://www.codegrepper.com/code-examples/csharp/asp+net+core+web+api+get+client+ip+address 他们告诉您如何使用上下文获取客户端 IP。像这样:

    var ip = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.ToString();
    

    最后我像这样修改我的代码:

    app.MapGet("/someRoute/{data}", async (
        long data, DatabaseContext appDb, HttpContext context) =>
    {
        var remoteIp = context.Connection.RemoteIpAddress;
            string clientIp = "";
            if(remoteIp != null)
            {
                clientIp = remoteIp.ToString();
            }
    

    它有效。 希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 2014-04-27
      • 2012-12-03
      • 2012-03-31
      • 2017-01-05
      • 2017-07-06
      • 1970-01-01
      • 2012-03-14
      • 2012-02-16
      相关资源
      最近更新 更多