![](/img/trans.png)
[英]Is HttpContext.Current.Items thread-safe between Requests?
[英]c# HttpContext.Current.Items is null in spawn thread
我有以下api方法:
public IHttpActionResult Post(LogModel value)
{
try
{
IDictionary items = HttpContext.Current.Items;
Thread thread = new Thread(() => LogSQL.LogDetail(items, value));
thread.Start();
return Ok();
}
catch (Exception ex)
{
...
}
}
在擊中控制器之前,將調用身份驗證和授權代碼,該代碼將一些數據保存在HttpContext.Current.Items中。
對於新威脅,HttpContext.Current.Items為null,因此我從父線程傳遞了items數據以在子線程中設置一個。
public static void LogDetail(IDictionary items, LogModel log)
{
var keys = (from System.Collections.DictionaryEntry dict in items
let key = dict.Key.ToString()
select key).ToList();
foreach (var key in keys)
{
HttpContext.Current.Items[key] = items[key];
}
...}
但這是行不通的。 HttpContext.Current.Items為null且為只讀,因此我無法進行任何設置。
我可以將“ items” parm全部傳遞給新線程中需要數據的任何對象,但是要盡量避免。
關於如何解決這個問題的任何想法? 我可以使用任何線程技巧嗎?
HttpContext.Current綁定到處理HTTP請求的線程。 如果生成新線程,則該線程不會與該上下文關聯。
我可以將“ items” parm全部傳遞給新線程中需要數據的任何對象,但是要盡量避免。
那是正確的方法。 從當前上下文中提取所需的任何內容,並將其傳遞給線程。
請注意,在處理HTTP請求時生成線程有些危險,因為
( 參考資料 ,以及對該主題的很好的閱讀,包括更好的方法)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.