簡體   English   中英

Web API 中的 Static 方法……正確還是錯誤?

[英]Static methods in Web API… Correct or wrong?

I am writing an asp.net web API using Visual Studio 2019. When I write as in the example below, Visual Studio recommends me making the method static. 所以我按照建議做了Web API static的所有方法。 這個對嗎? 如果它是正確的,有什么好處,如果它是錯誤的,有什么壞處? 謝謝...

嚴重性代碼描述項目文件行抑制State消息CA1822成員AdresleriGetir不訪問實例數據,可以標記為static(在VisualBasic中共享)Devriye.WebApi**

我的方法:

[HttpPost]
public static Adres[] AdresleriGetir([FromBody]GirisParametresi girisParametresi)
{
    if (girisParametresi != null)
    {
        string query = @"SELECT * FROM ADRESLER WHERE AKTIF=1";
        Cagri cagri = new Cagri()
        {
            Proje = "Devriye.WebApi",
            Modul = "AdresController",
            Metot = "AdresGetir",
            Nesne = new JavaScriptSerializer().Serialize(girisParametresi)
        };
        Log log = new Log(null, cagri, girisParametresi.Oturum);
        using (DataTable dataTable = DataAccessLayer.VerileriGetir(query, null, log))
        {
            List<Adres> adresler = new List<Adres>();
            if (dataTable.Rows.Count > 0)
            {
                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    Adres adres = new Adres();
                    try { adres.Cadde = Convert.ToString(dataTable.Rows[i]["Cadde".ToUpperInvariant()], WebApiConfig.CultureInfo); } catch (Exception ex) { if (log != null) { log.Hata = new Hata() { Aciklama = ex.Message, HataKodu = 997 }; Task.Run(() => DataAccessLayer.LogKaydet(log)); } }
                    try { adres.EklenmeTarihi = Convert.ToDateTime(dataTable.Rows[i]["EklenmeTarihi".ToUpperInvariant()], WebApiConfig.CultureInfo); } catch (Exception ex) { if (log != null) { log.Hata = new Hata() { Aciklama = ex.Message, HataKodu = 997 }; Task.Run(() => DataAccessLayer.LogKaydet(log)); } }
                    try { adres.ID = Convert.ToInt32(dataTable.Rows[i]["ID".ToUpperInvariant()], WebApiConfig.CultureInfo); } catch (Exception ex) { if (log != null) { log.Hata = new Hata() { Aciklama = ex.Message, HataKodu = 997 }; Task.Run(() => DataAccessLayer.LogKaydet(log)); } }
                    try { adres.Il = Convert.ToString(dataTable.Rows[i]["Il".ToUpperInvariant()], WebApiConfig.CultureInfo); } catch (Exception ex) { if (log != null) { log.Hata = new Hata() { Aciklama = ex.Message, HataKodu = 997 }; Task.Run(() => DataAccessLayer.LogKaydet(log)); } }
                    try { adres.Ilce = Convert.ToString(dataTable.Rows[i]["Ilce".ToUpperInvariant()], WebApiConfig.CultureInfo); } catch (Exception ex) { if (log != null) { log.Hata = new Hata() { Aciklama = ex.Message, HataKodu = 997 }; Task.Run(() => DataAccessLayer.LogKaydet(log)); } }
                    try { adres.KapiNo = Convert.ToString(dataTable.Rows[i]["KapiNo".ToUpperInvariant()], WebApiConfig.CultureInfo); } catch (Exception ex) { if (log != null) { log.Hata = new Hata() { Aciklama = ex.Message, HataKodu = 997 }; Task.Run(() => DataAccessLayer.LogKaydet(log)); } }
                    try { adres.Mahalle = Convert.ToString(dataTable.Rows[i]["Mahalle".ToUpperInvariant()], WebApiConfig.CultureInfo); } catch (Exception ex) { if (log != null) { log.Hata = new Hata() { Aciklama = ex.Message, HataKodu = 997 }; Task.Run(() => DataAccessLayer.LogKaydet(log)); } }
                    try { adres.PostaKodu = Convert.ToInt32(dataTable.Rows[i]["PostaKodu".ToUpperInvariant()], WebApiConfig.CultureInfo); } catch (Exception ex) { if (log != null) { log.Hata = new Hata() { Aciklama = ex.Message, HataKodu = 997 }; Task.Run(() => DataAccessLayer.LogKaydet(log)); } }
                    try { adres.Sokak = Convert.ToString(dataTable.Rows[i]["Sokak".ToUpperInvariant()], WebApiConfig.CultureInfo); } catch (Exception ex) { if (log != null) { log.Hata = new Hata() { Aciklama = ex.Message, HataKodu = 997 }; Task.Run(() => DataAccessLayer.LogKaydet(log)); } }
                    adresler.Add(adres);
                }
                return adresler.ToArray();
            }
            else
            {
                return null;
            }
        }
    }
    else
    {
        return null;
    }
}

這個 function 不訪問任何實例數據或調用任何實例方法。 我有類似的問題,關於 R# 想要將這種類型的 function 轉換為 static。 出於某些原因,請參閱此SO 問題 從鏈接中接受的答案;

這讓我問自己,所討論的方法是否實際上應該是類型的一部分。 由於它不使用任何實例數據,您至少應該考慮是否可以將其移動到自己的類型。 它是類型的一個組成部分,還是真的是一種通用的實用方法?

如果將方法保留在特定類型上確實有意義,則存在潛在的性能提升,因為編譯器將為 static 方法發出不同的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM