C# 在.net核心web API中创建静态实用程序类是正确的方法吗?
我计划为asp.net核心web api 3.1应用程序中字符串的Base64编码和解码创建一个通用实用程序类 以下是我的方法C# 在.net核心web API中创建静态实用程序类是正确的方法吗?,c#,.net,asp.net-core,asp.net-web-api,asp.net-core-webapi,C#,.net,Asp.net Core,Asp.net Web Api,Asp.net Core Webapi,我计划为asp.net核心web api 3.1应用程序中字符串的Base64编码和解码创建一个通用实用程序类 以下是我的方法 namespace CoreAPI.Utilities { public class Base64 { public static string Base64Encode(string plainText) { var plainTextBytes = System.Text.Encoding.UT
namespace CoreAPI.Utilities
{
public class Base64
{
public static string Base64Encode(string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
public static string Base64Decode(string base64EncodedData)
{
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
}
}
并从我的控制器调用相同的命令,如下所示
[HttpGet("api/clients/{clientid}")]
public ClientData GetClientDetails(int clientid)
{
string encodedclientdata="TestData" //actually fetched from DB
string Decodedvalue = Base64.Base64Encode(encodedclientdata);
//added other logic to return clientData object
}
现在我的疑问是,当用户并行访问api时,创建静态实用程序是否会产生任何问题?这会产生任何并发问题吗?在web api/web应用程序中创建静态类是最佳实践吗
如果这是一种错误的方法,如何在.net核心web api/web应用程序中添加通用实用程序方法?请引导我 您可以实现如下扩展方法:
namespace CoreAPI.Utilities
{
public static class StringBase64Extensions
{
public static string Base64Encode(this string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
public static string Base64Decode(this string base64EncodedData)
{
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
}
}
[HttpGet("api/clients/{clientid}")]
public ClientData GetClientDetails(int clientid)
{
string encodedclientdata="TestData".Base64Encode() //actually fetched from DB
string Decodedvalue = encodedclientdata.Base64Decode();
//added other logic to return clientData object
}
然后像这样使用它:
namespace CoreAPI.Utilities
{
public static class StringBase64Extensions
{
public static string Base64Encode(this string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
public static string Base64Decode(this string base64EncodedData)
{
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
}
}
[HttpGet("api/clients/{clientid}")]
public ClientData GetClientDetails(int clientid)
{
string encodedclientdata="TestData".Base64Encode() //actually fetched from DB
string Decodedvalue = encodedclientdata.Base64Decode();
//added other logic to return clientData object
}
这种扩展方法在c#中得到了广泛的应用,例如在System中。Linq有很多扩展方法。您可以实现如下扩展方法:
namespace CoreAPI.Utilities
{
public static class StringBase64Extensions
{
public static string Base64Encode(this string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
public static string Base64Decode(this string base64EncodedData)
{
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
}
}
[HttpGet("api/clients/{clientid}")]
public ClientData GetClientDetails(int clientid)
{
string encodedclientdata="TestData".Base64Encode() //actually fetched from DB
string Decodedvalue = encodedclientdata.Base64Decode();
//added other logic to return clientData object
}
然后像这样使用它:
namespace CoreAPI.Utilities
{
public static class StringBase64Extensions
{
public static string Base64Encode(this string plainText)
{
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
return System.Convert.ToBase64String(plainTextBytes);
}
public static string Base64Decode(this string base64EncodedData)
{
var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
}
}
}
[HttpGet("api/clients/{clientid}")]
public ClientData GetClientDetails(int clientid)
{
string encodedclientdata="TestData".Base64Encode() //actually fetched from DB
string Decodedvalue = encodedclientdata.Base64Decode();
//added other logic to return clientData object
}
这种扩展方法在c#中得到了广泛的应用,例如在System.Linq中,有很多扩展方法。一种扩展方法可能是实现这个()的更好的方法,但是这种方法也不会有并行线程的问题,因为在方法中只使用局部变量。这些局部变量只存在于执行函数的特定线程中,不能从方法块外部访问。扩展方法可能是实现此()的更好方法,但这种方法也不会出现并行线程问题,因为您只在方法中使用局部变量。这些局部变量只存在于执行函数的特定线程中,并且不能从方法块外部访问。关于并发性:您的方法是无状态的,没有副作用,因此不会有任何问题。@PeterBons:使用静态方法是一种好的做法?像这样的静态类没有错,所以是的,一般来说,这是一种好的做法(假设函数不关联任何状态信息)。静态的问题是当一切都是静态的(类、方法、成员变量、属性)。internet上有数千篇关于
静态
及其工作原理的文章。我建议您至少阅读其中一篇。Microsoft自己的MSDN是一个很好的起点。一般来说,我不会使用关键字作为类的名称。这会导致导入问题。就我个人而言,我使用静态来表示“功能性”例程(没有依赖关系的输入和输出)..您不想变得静态疯狂…….您需要了解IoC/DI原则以及静态如何对IoC/DI产生不利影响。请不要变得静态疯狂…….我必须重构代码库,其中所有内容都是一个扩展方法。关于并发性:您的方法是无状态的,没有副作用,因此不会出现任何问题有什么问题吗?@PeterBons:使用静态方法是一种很好的做法吗?像这样的静态类没有错,所以是的,一般来说,这是一种很好的做法(假设函数不涉及任何状态信息)。静态的问题是当一切都是静态的(类、方法、成员变量、属性)。internet上有数千篇关于静态
及其工作原理的文章。我建议您至少阅读其中一篇。Microsoft自己的MSDN是一个很好的起点。一般来说,我不会使用关键字作为类的名称。这会导致导入问题。就我个人而言,我使用静态来表示“功能性”例程(没有依赖关系的输入或输出)……您不想陷入静态疯狂……。您需要了解IoC/DI原则以及静态如何对IoC/DI产生负面影响。请不要陷入静态疯狂……。我必须重构代码库,因为所有东西都是扩展方法。