如何解决将声明从 WebApp 传递到 API
我正在开发一个 Web 应用程序并希望将一些自定义声明传递给 API。我有以下代码来设置用户声明并调用 API。我期待在 API 中访问此声明,但它没有发生。有人可以帮忙吗?我们如何将声明和其他身份信息从 Web 应用程序传递到 API。
public async Task<IActionResult> Privacy3()
{
SetClaim("db2");
var httpClient = _clientFactory.CreateClient("NewApi");
var api = new HttpRequestMessage(HttpMethod.Get,"/api/customer");
var response = await httpClient.SendAsync(api);
if (response.IsSuccessStatusCode)
{
using var responseStream = await response.Content.ReadAsStreamAsync();
var data = await JsonSerializer.DeserializeAsync<IEnumerable<Customer>>(responseStream,new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
return View(data);
}
else
{
return View();
}
}
private ClaimsPrincipal SetClaim(string id)
{
if (id == null || id == "")
{
id = "db1";
}
ClaimsPrincipal principal = HttpContext.User;
var identity = (ClaimsIdentity)principal.Identity;
identity.AddClaim(new Claim("db",id));
return principal;
}
我的API代码如下
public void ConfigureServices(IServiceCollection services)
{
//From Mr Browne
services.AddControllers();
services.AddHttpContextAccessor();
services.AddDbContext<CustomerDataContext>((sp,options) =>
{
var requestContext = sp.GetRequiredService<IHttpContextAccessor>().HttpContext;
var constr = GetConnectionStringFromRequestContext(requestContext);
options.UseSqlServer(constr,o => o.UseRelationalNulls());
});
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1",new OpenApiInfo { Title = "AspNetCoreEfTest",Version = "v1" });
});
}
private string GetConnectionStringFromRequestContext(HttpContext requestContext)
{
var host = requestContext.User;
var dbname = "AspNetCoreEfTest";
if (host.Claims.Count(e => e.Type == "db") > 0)
{
var db = host.Claims.FirstOrDefault(e => e.Type == "db").Value;
if (db == "db1")
{
dbname = "AspNetCoreEfTest";
}
else if (db == "db2")
{
dbname = "AspNetCoreEfTestTwo";
}
}
return "Server=(localdb)\\mssqllocaldb;Database=" + dbname + ";Integrated Security=true";
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。