.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 [...]
}
但是我被困在那里。
最佳答案
我想您可能希望这是一个静态电话。但是,更好的方法是使该帮助程序成为可注射的服务,但是不确定您是否会认为它太高级或过大。
我只是建议它,正如您指出的那样,它将被多个控制器使用。
现在,既然您提到要保持简单,虽然不是最好的设计,但要使方法静态,
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);
//...
}
关于c# - ASP.Net Core中的自定义类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53720113/