Как создать логин, указав базу данных или несколько строк подключения в веб-API? - PullRequest
0 голосов
/ 21 марта 2019

Как создать логин, указав базу данных или несколько строк подключения в веб-API?

У меня есть следующий код, и я хочу, чтобы пользователь мог выбрать свою базу данных в начале сеанса, чтобы он отправлял учетные данные и одновременно имя строки подключения, полученной в раскрывающемся списке меню в .html логине.

    //project AccesoDatos..
//OwinContext Is it unattainable from this project? What I can do?


       namespace AccesoDatos
{
    public  class DaoConexion: MarshalByRefObject
    {
        public Database DB { get; set; }
        public Database DaoConexionDbContext()
        {
            ///Obtain claims from the security database.
            var claims = ((ClaimsIdentity)Thread.CurrentPrincipal.Identity);
            var claim = claims.Claims.Where(x => x.Type == "ConnectionStringsName").FirstOrDefault();

            if (claim ==null)
            {
                ///Get the DefaultConnection of the web.config 
                ///To authenticate the user and return the claims of the security database.
                string DefaultConnection;
                DefaultConnection = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
                return DB =new SqlDatabase(DefaultConnection);
            }
            return DB = new SqlDatabase(claim.Value);
        }       
    }
}

потребление соединения

//project PersonaES..
    namespace ServiciosEntidad.PersonaES.Repositorio
    {
        public class PersonaESRepositorio : DaoConexion, IPersonaESRepositorio
        {        
    public List<Persona> ListarPersonas()
            {
        DB = DaoConexionDbContext();
        DbCommand command = DB.GetStoredProcCommand("spListarPersonas");
        DataSet ds = this.DB.ExecuteDataSet(command);
        if (ds.Tables[0].AsEnumerable().Count() == 0)
            return null;
        return ds.Tables[0].AsEnumerable().Select(row => new Persona
        {                    
            Tipo = row.Field<string>("Tipo"),
            Id = row.Field<int>("Id"),
            PrimerNombre = row.Field<string>("PrimerNombre"),
            SegundoNombre = row.Field<string>("SegundoNombre"),
            PrimerApellido = row.Field<string>("PrimerApellido")
         }}}}

img пример.

https://drive.google.com/open?id=1kRv5glvHzsr5vNlvgmsFZW2HlJ7YJqDa

Мое приложение управляет архитектурой SOAP. У меня есть проект с именем: DataAccess, с классом DaoConexion. Используя класс базы данных (Microsoft.Practices.EnterpriseLibrary.Data), который в свою очередь реализует DatabaseFactory.CreateDatabase, Instancio этот проект в каждом из репозиториев, каждый репозиторий является проектом в рамках одного решения.

Эти проекты внедряются в мой Web API, но у API есть собственная строка подключения. Мое намерение состоит в том, чтобы изменить строку подключения, используемую проектом DataAccess, в зависимости от текущего подключения веб-API, при выполнении веб-API

//main project Taller (WEB API C#)
    namespace Taller.Models
    {
        public class IdentityContext : IdentityDbContext<IdentityUser>
        {
            public IdentityContext(string connectionStringName) 
                : base(connectionStringName)
            {
            }
            public static IdentityContext Create(string connectionStringName)
            {          
                return new IdentityContext(connectionStringName);
            }
        }
    }

Пользователь отправляет имя строки подключения.

//main project Taller (WEB API C#)
    namespace Taller.Controllers
    {
        public class UtilidadController : ApiController
        {
        [HttpPost]
                public string GetConectarDbEmpresa(Empresas empresas)
            {
                if (empresas.ConnectionStringsName =="")
                {
                     empresas.ConnectionStringsName = "DefaultConnection";
                    IdentityContext.Create(empresas.ConnectionStringsName);
                }
                else
                {
                    IdentityContext.Create(empresas.ConnectionStringsName);               
                }
                return "Te as Conectado a la Empresa Por Favor ingresa tus Credenciales: ";
            }}}

пользователь уже указал в сеансе входа в систему, какой BD использовать, я не знаю, как временно сохранить connectionStringName, пока у пользователя есть активный сеанс

//main project Taller (WEB API C#)

    public partial class Startup{...
   public void ConfigureAuth(IAppBuilder app){...

        var claims = ((ClaimsIdentity)Thread.CurrentPrincipal.Identity);
        var claim = claims.Claims.Where(x => x.Type == "ConnectionStringsName").FirstOrDefault();
        if (claim != null)
        {
            app.CreatePerOwinContext(() => IdentityContext.Create(claim.Value));
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
        }
        else
        {
            app.CreatePerOwinContext(() => IdentityContext.Create("DefaultConnection"));
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...