Raf*_*aya 5 c# asp.net minimal-apis
我使用 Microsoft https://learn.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();
Run Code Online (Sandbox Code Playgroud)
我的功能是这样的:
app.MapGet("/SomeRoute/{data}", async (long data, Context appDb) =>
{
var tabladata = await appDb.Table1
.Where(some code here)
.ToListAsync();
return Results.Ok(tabladata);
});
Run Code Online (Sandbox Code Playgroud)
我发现我可以使用以下代码获取 IP 客户端: 在 var app = builder.Build(); 之前添加此代码
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
Run Code Online (Sandbox Code Playgroud)
之后:
app.UseForwardedHeaders();
Run Code Online (Sandbox Code Playgroud)
最后看起来像这样:
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();
Run Code Online (Sandbox Code Playgroud)
我如何获得调用 Web api 函数的 IP 客户端?
谢谢。
找到了解决方案。\n此处:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/http-context ?view=aspnetcore-6.0
\n他们告诉您如何在“使用最小 API 中的 HttpContext”标题下获取 HTTPContext。你只需要添加参数就可以了,我不知道为什么,但是如果你把它放在那里你就会得到参数。
\napp.MapGet("/", (HttpContext context) => context.Response.WriteAsync("Hello World"));\nRun Code Online (Sandbox Code Playgroud)\n之后,在此页面中:https://www.codegrepper.com/code-examples/csharp/asp+net+core+web+api+get+client+ip+address \n他们告诉你如何获取客户端IP使用上下文。像这样:
\nvar ip = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.ToString();\nRun Code Online (Sandbox Code Playgroud)\n最后我像这样修改我的代码:
\napp.MapGet("/someRoute/{data}", async (\n long data, DatabaseContext appDb, HttpContext context) =>\n{\n var remoteIp = context.Connection.RemoteIpAddress;\n string clientIp = "";\n if(remoteIp != null)\n {\n clientIp = remoteIp.ToString();\n }\nRun Code Online (Sandbox Code Playgroud)\n它有效。\n希望这对其他人有帮助。
\n