Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.net核心web API中创建静态实用程序类是正确的方法吗?_C#_.net_Asp.net Core_Asp.net Web Api_Asp.net Core Webapi - Fatal编程技术网

C# 在.net核心web API中创建静态实用程序类是正确的方法吗?

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

我计划为asp.net核心web api 3.1应用程序中字符串的Base64编码和解码创建一个通用实用程序类

以下是我的方法

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产生负面影响。请不要陷入静态疯狂……。我必须重构代码库,因为所有东西都是扩展方法。