Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 将声明从WebApp传递到API_Asp.net Core_Asp.net Web Api_Claims Based Identity_Claims - Fatal编程技术网

Asp.net core 将声明从WebApp传递到API

Asp.net core 将声明从WebApp传递到API,asp.net-core,asp.net-web-api,claims-based-identity,claims,Asp.net Core,Asp.net Web Api,Claims Based Identity,Claims,我正在开发一个web应用程序,希望将一些自定义声明传递给API。我有以下代码来设置用户声明并调用API。我希望在API中访问此声明,但它没有发生。有人能帮忙吗?我们如何将声明和其他身份信息从web应用程序传递到API public async Task<IActionResult> Privacy3() { SetClaim("db2"); var httpClient = _clientFac

我正在开发一个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;
        }
public异步任务Privacy3()
{
SetClaim(“db2”);
var httpClient=_clientFactory.CreateClient(“NewApi”);
var api=新的HttpRequestMessage(HttpMethod.Get,“/api/customer”);
var response=wait-httpClient.SendAsync(api);
if(响应。IsSuccessStatusCode)
{
使用var responseStream=wait response.Content.ReadAsStreamAsync();
var data=await JsonSerializer.DeserializeAsync(responseStream,new JsonSerializerOptions(){propertynamecasensitive=true});
返回视图(数据);
}
其他的
{
返回视图();
}
}
private ClaimsPrincipal SetClaim(字符串id)
{
如果(id==null | | id==“”)
{
id=“db1”;
}
ClaimsPrincipal principal=HttpContext.User;
var identity=(ClaimsIdentity)principal.identity;
identity.AddClaim(新索赔(“db”,id));
返还本金;
}
我的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";
        }
public void配置服务(IServiceCollection服务)
{
//来自布朗先生
services.AddControllers();
AddHttpContextAccessor();
services.AddDbContext((sp,选项)=>
{
var requestContext=sp.GetRequiredService().HttpContext;
var constr=GetConnectionStringFromRequestContext(requestContext);
options.UseSqlServer(constr,o=>o.UserRelationalNulls());
});
services.AddSwaggerGen(c=>
{
c、 SwaggerDoc(“v1”,新OpenApiInfo{Title=“AspNetCoreEfTest”,Version=“v1”});
});
}
私有字符串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;
如果(db==“db1”)
{
dbname=“AspNetCoreEfTest”;
}
else if(db==“db2”)
{
dbname=“AspNetCoreEfTestTwo”;
}
}
返回“Server=(localdb)\\mssqllocaldb;Database=“+dbname+”;integratedsecurity=true”;
}

你试过这个吗?嗨,蒂莎,谢谢你的链接。我试试看。你有没有没有没有识别服务器。这是一项付费服务,每年12000美元