[英]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.