小编Rid*_*his的帖子

使用Ninject OWIN中间件在OWIN启动中注入UserStore的依赖关系

在使用OWIN请求管道创建ApplicationUserManager时,使用依赖项注入创建自定义UserStore时遇到问题.

背景

我正在尝试将我们的Web应用程序中的用户功能从使用SimpleMembership迁移到新的ASP.NET标识.在启动新的MVC 5项目时,单页面应用程序的默认实现使用ASP.Identity,使用Entity Framework实现UserStore功能.

在我的例子中,我们已经使用NHibernate作为ORM,并使用ninject实现工作单元模式,以便每个请求有一个NHibernate会话,我想让ASP.Identity与我们现有的框架一起工作.

为此,我创建了一个自定义UserStore,可以通过注入相关的存储库/ nhibernate会话等来创建.然后可以使用Ninject将其注入Controller的构造函数,而不是使用默认实现的GetOwinContext功能.

为了做到这一点,我在Startup的ConfigureAuth(IAppBuilder app)方法中注释掉了以下行,默认情况下会创建UserManager类:

// app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
Run Code Online (Sandbox Code Playgroud)

相反,我使用了在安装Ninject.Web.Common.Webhost nuget包时创建的NinjectWebCommon来创建相关的绑定.

这个实现在一些UserManager操作中运行良好,但是对于一些操作,例如ResetPasswordAsync,它失败了,因为没有调用默认的ApplicationUserManager实现,因此从未设置UserManager类中的UserTokenProvider:

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    {
        var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
        // Configure validation logic for usernames
        manager.UserValidator = new UserValidator<ApplicationUser>(manager)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };
        // Configure validation logic for passwords
        manager.PasswordValidator = new PasswordValidator
        {
            RequiredLength = 6,
            RequireNonLetterOrDigit = true,
            RequireDigit = true,
            RequireLowercase = true,
            RequireUppercase = true,
        };
        // Register two factor authentication providers. …
Run Code Online (Sandbox Code Playgroud)

c# asp.net dependency-injection ninject owin

39
推荐指数
1
解决办法
2万
查看次数

用C#记录继承Equals的实现

我正在尝试创建一个基本记录类型,它将使用Equals()值相等的不同实现,因为它将使用比较集合对象SequenceEqual(),而不是通过引用比较它们。

但是,Equals() 的实现并不像我期望的继承那样工作。

在下面的示例中,我有一个派生类,它有两个不同的列表。在相等性的默认实现下,这些记录是不同的,因为它是通过引用相等性而不是序列相等性来比较列表。

Equals()如果我覆盖基本记录上的默认实现以始终返回true,单元测试将失败,即使代码正在调用RecordBase.Equals(RecordBase obj)

public abstract record RecordBase
{
    public virtual bool Equals(RecordBase obj)
    {
        return true;
    }
}

public record DerivedRecord : RecordBase
{
    public DerivedRecord(ICollection<int> testCollection)
    {
        TestCollection = testCollection;
    }

    public ICollection<int> TestCollection { get; init; }
}

public class RecordTests
{
    [Fact]
    public void Equals_WhenCollectionHasSameValues_ReturnsTrue()
    {
        var recordTest1 = new DerivedRecord(new List<int>() { 1, 2, 3 });
        var recordTest2 = new DerivedRecord(new List<int>() { 1, …
Run Code Online (Sandbox Code Playgroud)

c# inheritance equality record

5
推荐指数
1
解决办法
1429
查看次数

错误:部署失败:从 Azure DevOps 服务部署到应用服务时出现 ERROR_DESTINATION_NOT_REACHABLE

我正在尝试将我的站点从 Azure DevOps Services 部署到应用服务。但是,当我尝试部署站点时,部署 Azure 应用服务任务失败并显示错误消息:

错误:错误代码:ERROR_DESTINATION_NOT_REACHABLE 更多信息:无法连接到远程计算机(“{my-website}.scm.azurewebsites.net”)。在远程计算机上,确保安装了 Web Deploy 并启动了所需的进程(“Web 管理服务”)。了解更多信息:http : //go.microsoft.com/fwlink/?LinkId=221672#ERROR_DESTINATION_NOT_REACHABLE

复制步骤:

  1. 在 .NET Core 中创建一个站点并将其上传到 Azure DevOps Services 中的 Azure Repo
  2. 使用暂存部署槽在 Azure 门户中创建应用服务
  3. 在管道部分 Azure DevOps 中创建管道,它将构建解决方案并将构建工件发布到默认暂存目录
  4. 在 Azure DevOps 的 Releases 部分创建一个管道,它将获取构建工件并运行部署 Azure App 服务任务以将其部署到我的应用服务。(我填写了必填字段,但没有填写可选字段。)

发布管道的日志显示它在 msdeploy.exe (ComputerName='https://{my-website}.scm.azurewebsites.net:443/msdeploy.axd?site=dotnetcore-webpack-test' ) 步骤与上述错误,由于 404。

https://{my-website}.scm.azurewebsites.net:443 将带我到 kudu 仪表板,但路由 /msdeploy.exe 返回一个页面,显示“没有为‘/msdeploy.axd’注册路由”

根据错误消息中的链接,此错误是由“远程计算机上未安装或无法访问 Web 管理服务或远程代理”引起的。

但是,我正在尝试部署到应用服务,而不是虚拟机,以及我一直在尝试遵循的所有教程,它似乎开箱即用,无需配置 Web 管理服务/防火墙设置等。

我是否遗漏了一步或做错了什么?我很感激有关如何进一步解决此问题的任何建议。

deployment azure azure-web-app-service azure-devops

1
推荐指数
1
解决办法
1288
查看次数

部署到 azure 应用服务时站点不显示

我正在尝试部署一个简单的“Hello World!” 使用 Azure 门户部署中心将 .NET Core MVC 3.1 Web 应用程序连接到 Azure 应用服务。

我使用 .Net Core 版本 3.1 创建了一个应用程序。(Visual Studio 2019 下拉列表中只有版本 3.1,而不是 3.0。)

Visual Studio 2019 创建向导下拉列表:

Visual Studio 2019 中的框架版本下拉列表

但是部署中心尚不支持此功能。您可以在添加创建应用服务计划时选择运行时堆栈 3.1 (LTS),但当您尝试使用部署中心创建 CI/CD 管道时,会出现错误:“source.buildConfiguration.version: Property 'source. buildConfiguration.version' 具有无效/不受支持的值“LTS””

如果我将 Web 应用程序降级到版本 3.0,并使用 Azure 门户部署中心(从我的 Azure Repo 构建)创建 3.0 的应用程序服务/部署管道,它表示部署已成功,但它仍然显示默认站点,不是我的“Hello World!” 地点。

Azure Devops Services 表明部署已成功: 部署成功屏幕

因此,我期待看到我的“Hello World!” 地点: 你好世界网站

但是,它仍然显示默认站点: 默认 Azure 应用程序站点

鉴于没有错误消息,我不确定如何最好地调试部署中出现的问题。任何意见,将不胜感激。

deployment azure .net-core azure-web-app-service

1
推荐指数
1
解决办法
7830
查看次数