簡體   English   中英

ASP.NET中的靜態方法

[英]Static Methods in ASP.NET

我對asp.net-pages中的靜態方法有點困惑。 例如,如果我創建一個靜態數據庫方法來從數據庫中獲取Userdata(類似於UserDBHandler.getUser()),那么從網頁中調用該方法是否安全? 是不是為每個頁面調用創建了一個新線程? 並且HttpContext.Current總是返回當前用戶上下文,因此從靜態方法調用它來獲取當前用戶會話是否安全?

謝謝

從網頁中調用該方法是否安全

僅當此方法是可重入的時 使用sql的示例:

public static User GetUser(string username)
{
    using (var connection = new SqlConnection(ConnectionString))
    using (var command = connection.CreateCommand())
    {
        connection.Open();
        command.CommandText = "select name, username from users where username = @username";
        command.Parameters.AddWithValue("@username", username);
        using (var reader = command.ExecuteReader()) 
        {
            while (reader.Read())
            {
                return new User 
                {
                    Username = username,
                    Name = reader.GetString(0),
                }
            }
        }
        return null;
    }
}

並在您的ASPX頁面中調用:

var user = SomeClass.GetUser(Session["username"]);

並且HttpContext.Current總是返回當前用戶上下文,因此從靜態方法調用它來獲取當前用戶會話是否安全?

是的,HttpContext.Current可以安全地用於獲取當前的HTTP上下文。 但我建議你不要在數據庫訪問方法中調用HttpContext.Current。 只需傳遞所需的參數作為參數,以便在調用方法時您的ASPX頁面將安全地讀取會話並傳遞所需的參數。

備注和個人建議: 不要使用靜態方法進行數據訪問。 使用靜態方法調用代碼幾乎不可能進行單元測試。

從網頁中調用該方法是否安全

這實際上取決於你在方法中做了什么。 這種方法應該是沒有副作用的功能。

不是為每個頁面調用創建的新線程

是。

does HttpContext.Current always return the current-users context, so is it safe to call that from static methods to get the current-users session??

是。

如果你想成為一個純粹主義者,不建議依賴靜態方法,因為它們使你的代碼很難單獨測試。 如果A類在B類上調用靜態方法,那么在沒有測試/調用B的情況下,您將永遠無法測試A類。

在單個會話的范圍內,我相信您將在單個線程上運行,因此這不應該是一個問題。

這取決於方法的編寫方式。 如果該方法是以線程安全的方式編寫的,那么您應該沒有問題。

暫無
暫無

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

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