【问题标题】:Custom classes in ASP.Net CoreASP.Net Core 中的自定义类
【发布时间】:2018-12-11 08:28:21
【问题描述】:

.NET Core 新手我正在尝试创建一个自定义类,我可以从不同的控制器调用它。

在我的项目的根目录中,我创建了一个名为 Helpers 的文件夹。我创建了 EncryptString.cs:

namespace VPV.Helpers {
    public class EncryptString {
        public string Index(string val, string salt) {
            byte[] data = Encoding.UTF8.GetBytes(val + salt);
            data = SHA512.Create().ComputeHash(data);
            return Convert.ToBase64String(data);
        }
    }
}

但是如何从我的控制器调用它呢?

我尝试过类似的方法:

public async Task<IActionResult> OnPostAsync(Guid id, string password, string passwordCheck) {
    hashedPassword = new VPV.Helpers.EncryptString [...]
}

但我从那里被困住了。

【问题讨论】:

  • 我想你可能希望这是一个静态调用。然而,更好的方法是使该助手成为可注入服务,但不确定您是否认为这太高级或过度杀伤力。我只是建议它,因为您指出它将被多个控制器使用。
  • 鉴于OnPostAsync 命名。这是一个剃须刀页面项目吗?
  • 我想让它尽可能简单。是否可以按照我开始的方式进行? IMO 它不能比从我需要它的控制器调用“新 VPV.Helpers.EncryptString”简单得多吗?是的,它是 Razor Pages。
  • 好吧,虽然不是最好的设计,但将方法设为静态,并在需要的地方调用它。

标签: c# asp.net-core asp.net-core-mvc razor-pages


【解决方案1】:

我想你可能希望这是一个静态调用。然而,更好的方法是使该助手成为可注入服务,但不确定您是否认为这太高级或过度杀伤力。

我只是建议它,因为你指出它将被多个控制器使用。

既然你提到你想保持简单,虽然不是最好的设计,但让方法静态,

namespace VPV.Helpers {    
    public static class Strings {    
        public string Encrypt(string val, string salt) {
            byte[] data = Encoding.UTF8.GetBytes(val + salt);
            data = SHA512.Create().ComputeHash(data);
            return Convert.ToBase64String(data);
        }
    }
}

并在需要的地方调用它。

public async Task<IActionResult> OnPostAsync(Guid id, string password, string passwordCheck) {
    //...

    var hashedPassword = new VPV.Helpers.Strings.Encrypt(password, salt);

    //...
}

您也可以考虑将帮助程序转换为扩展方法

namespace VPV.Helpers {    
    public static class Strings {    
        public string Encrypt(this string val, string salt) {
            byte[] data = Encoding.UTF8.GetBytes(val + salt);
            data = SHA512.Create().ComputeHash(data);
            return Convert.ToBase64String(data);
        }
    }
}

这意味着你可以这样称呼它

public async Task<IActionResult> OnPostAsync(Guid id, string password, string passwordCheck) {
    //...

    var hashedPassword = password.Encrypt(salt);

    //...
}

【讨论】:

  • 可注入服务是要走的路——不是因为它是一个好方法,而是因为这就是 ASP.Net 核心的构建方式。如果你以任何其他方式做到这一点,你就会不断地与之抗争。
  • 非常感谢!一个比另一个好吗?
  • @Mads 他们基本上是一样的。最后会根据你的喜好
  • @Mads 通过将其设为扩展方法,您可以使用任一建议的语法调用。
  • @gbjbaanb 怎么打呢?阅读docs.microsoft.com/en-us/aspnet/core/fundamentals/…注入似乎也很简单,但我得到了什么?
猜你喜欢
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
相关资源
最近更新 更多