Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
C# ApplicationDbContext的DefaultConnection字符串出现随机且不一致的错误_C#_Asp.net Mvc_Entity Framework_Authentication_Connection String - Fatal编程技术网

C# ApplicationDbContext的DefaultConnection字符串出现随机且不一致的错误

C# ApplicationDbContext的DefaultConnection字符串出现随机且不一致的错误,c#,asp.net-mvc,entity-framework,authentication,connection-string,C#,Asp.net Mvc,Entity Framework,Authentication,Connection String,我的MVC应用程序中有一种奇怪的行为。在某个时候,我开始得到一个奇怪的初始化字符串格式,它不符合从索引0开始的规范。所有页面都出错 我说这是随机和不一致的,因为: 当没有对任何连接字符串进行任何更改时,它开始发生 大多数时候我在Firefox上都会出错 同时,它也适用于Chrome和IE 现在,我的发布配置文件添加了有问题的连接字符串,它如下所示: 当我删除这个连接字符串时,Firefox中的错误变为 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服

我的MVC应用程序中有一种奇怪的行为。在某个时候,我开始得到一个奇怪的
初始化字符串格式,它不符合从索引0开始的规范。
所有页面都出错

我说这是随机和不一致的,因为:

  • 当没有对任何连接字符串进行任何更改时,它开始发生
  • 大多数时候我在Firefox上都会出错
  • 同时,它也适用于Chrome和IE
  • 现在,我的发布配置文件添加了有问题的连接字符串,它如下所示:

    当我删除这个连接字符串时,Firefox中的错误变为

    建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:SQL网络接口,错误:26-定位指定的服务器/实例时出错)

    (同样,它同时在Chrome和IE中工作)

    通过“它可以工作”,我的意思是我可以使用我的域凭据登录到页面(应该使用AD身份验证)并浏览页面等

    我的MVC应用程序应该只直接使用EF进行审计跟踪日志记录(可选地,存储在本地数据库中)。 为此,我设置了一个单独的DbContext类,该类指向一个特定的单独连接字符串——这一切都很好

    “DefaultConnection”由样板OWIN身份验证代码使用的ApplicationDbContext使用:

    public ApplicationDbContext():base(“DefaultConnection”,throwifvv1schema:false)

    业务数据访问层被分离到一个不同的web API中,我在其中设置了适当的DbContext和连接字符串(也可以正常工作) 我的web应用的身份验证也在单独的web API中完成。我将HTTPS post中的凭据传递给API,使用PrincipalContext验证它们,并将声明集返回给web应用程序

    在那里,我得到了一个IAAuthenticationManager的实例
    this.HttpContext.GetOwinContext().Authentication

    然后用我的索赔实例登录

    this.AuthenticationManager.SignIn(新的AuthenticationProperties(){IsPersistent=rememberMe},标识)

    现在,有两个问题:

  • 似乎我根本不需要ApplicationDbContext和使用它的位在我的应用程序中?我的意思是:
  • app.CreatePerOwinContext(ApplicationDbContext.Create);
    app.CreatePerOwinContext(ApplicationUserManager.Create);
    app.CreatePerOwinContext(ApplicationSignInManager.Create)

  • 为什么它开始抛出错误,为什么它仍然在其他浏览器中工作
  • 谢谢你的建议

    ==========================

    更新 事实上,现在我在Chrome中也遇到了同样的错误,这让我认为这一定与我登录到该浏览器页面的时间有关。。。或者别的什么

    因此,在清除cookies之后,我的页面在给定的浏览器中再次工作。什么。。。为什么?

    现在我知道了

    原因是样板文件ConfigureAuth()方法中的“OnValidateIdentity”代码位

    app.UseCookieAuthentication(新的CookieAuthenticationOptions
    {
    AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,
    LoginPath=新路径字符串(“/Account/Login”),
    Provider=新CookieAuthenticationProvider
    {
    //允许应用程序在用户登录时验证安全戳。
    //这是一种安全功能,在您更改密码或向帐户添加外部登录时使用。
    OnValidateIdentity=SecurityStampValidator.OnValidateIdentity(
    validateInterval:TimeSpan.FromMinutes(30),
    regenerateIdentity:(管理器,用户)=>user.GenerateUserIdentityAsync(管理器))
    },
    });
    
    它试图在指定的时间间隔(30分钟)后调用身份验证。因此,在我登录30分钟后,它尝试验证身份,并因此调用了有问题的DbContext

    它“有时起作用”以及我之所以称之为随机/不一致的原因是,我时不时地会清除cookie或尝试不同的浏览器,而这些浏览器不包含触发验证的cookie。然后,我会看到它工作,并且在相当长的一段时间内反复工作

    原因是样板文件ConfigureAuth()方法中的“OnValidateIdentity”代码位

    app.UseCookieAuthentication(新的CookieAuthenticationOptions
    {
    AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,
    LoginPath=新路径字符串(“/Account/Login”),
    Provider=新CookieAuthenticationProvider
    {
    //允许应用程序在用户登录时验证安全戳。
    //这是一种安全功能,在您更改密码或向帐户添加外部登录时使用。
    OnValidateIdentity=SecurityStampValidator.OnValidateIdentity(
    validateInterval:TimeSpan.FromMinutes(30),
    regenerateIdentity:(管理器,用户)=>user.GenerateUserIdentityAsync(管理器))
    },
    });
    
    它试图在指定的时间间隔(30分钟)后调用身份验证。因此,在我登录30分钟后,它尝试验证身份,并因此调用了有问题的DbContext

    原因
    app.UseCookieAuthentication(new CookieAuthenticationOptions
                {
                    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                    LoginPath = new PathString("/Account/Login"),
                    Provider = new CookieAuthenticationProvider
                    {
                        // Enables the application to validate the security stamp when the user logs in.
                        // This is a security feature which is used when you change a password or add an external login to your account.  
                        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                            validateInterval: TimeSpan.FromMinutes(30),
                            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
                    },
    
    
                });