Статические методы в Web API ... Правильно или неправильно? - PullRequest
0 голосов
/ 01 ноября 2019

Я пишу веб-API asp.net с использованием Visual Studio 2019. Когда я пишу, как в примере ниже, Visual Studio рекомендует сделать метод статичным. Поэтому я последовал совету и сделал все методы веб-API статичными. Это верно? В чем преимущество, если оно правильное, и как оно, если оно неверно? Спасибо ...

Код серьезности Описание Сообщение о состоянии подавления строки файла проекта CA1822 Член AdresleriGetir не обращается к данным экземпляра и может быть помечен как статический (Shared в 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;
    }
}

1 Ответ

0 голосов
/ 01 ноября 2019

Эта функция не имеет доступа к данным экземпляра и не вызывает методы экземпляра. У меня были похожие вопросы о том, чтобы R # захотел преобразовать этот тип функции в статический. Посмотрите этот ТАК * вопрос по некоторым причинам. Из принятого ответа по ссылке:

Это заставляет меня задаться вопросом, должен ли данный метод быть частью типа или нет. Поскольку он не использует никаких данных экземпляра, вы должны хотя бы подумать, можно ли его переместить в его собственный тип. Является ли это неотъемлемой частью типа, или это действительно служебный метод общего назначения?

Если имеет смысл сохранить метод для определенного типа, существует потенциальный выигрыш в производительности, поскольку компилятор будет выдавать разныекод для статического метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...