2017-06-13 62 views
-1

將API控制器的新對象的每個請求的頁面後創建ApiController的目的?爲每個請求ASP.NET

所以,我需要知道,如果條件#1永遠是真的還是假的?

public class ProductsController : ApiController { 
    private int _reqState = -1; 

    public object Get(int id) { 
     if (_reqState == -1} {} //condition #1 
     //DO SOME WORK WITH _reqState 
    } 
} 

回答

1

是的,一個控制器壽命短,只是爲了這個請求。之後,它被處置,你的價值就會喪失。

如果您想保留某些狀態,您必須使用SessionApplication或外部存儲器來保存您的狀態。

例如:

private int ReqState 
{ 
    get 
    { 
     return (this.HttpContext.Session["ReqState"] as int?).GetValueOrDefault(-1); 
    } 
    set 
    { 
     this.HttpContext.Session["ReqState"] = value; 
    } 
} 
+0

雅,我只是想知道有保證爲每個請求的對象將創建,但在MSDN我找不到它 – sinitram

0

假設的_reqState值不動作方法的調用(Get()),然後條件檢查之間改變,或者在你的控制器構造 - 然後是所述條件始終真正。

public class ProductsController : ApiController { 

    public ProductsController() 
    { 
     // As long as _reqState is not changed here 
    } 

    private int _reqState = -1; 

    public object Get(int id) { 

     // ... or here 

     if (_reqState == -1} {} //condition #1 - always true 
     //DO SOME WORK WITH _reqState 
    } 
} 

_reqState的值集被創建控制器以及與每個請求銷燬不跨越多個請求進行。

所以_reqState的值不是每次變量的實例,它是新設置的-1值。