ASP.Net 核心中的自定义 类

Custom classes in ASP.Net Core

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

在我项目的根目录中,我创建了一个名为 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);

    //...
}