API Controller的新对象是否会在每次请求页面后创建?
所以我需要知道条件#1是否总是正确的?
public class ProductsController : ApiController {
private int _reqState = -1;
public object Get(int id) {
if (_reqState == -1} {} //condition #1
//DO SOME WORK WITH _reqState
}
}
答案 0 :(得分:1)
是的,控制器的生命周期很短,仅适用于此请求。之后它被处理掉了,你的价值就会丢失。
如果您想保留某些状态,则必须使用Session
,Application
或外部存储空间来保存您的状态。
例如:
private int ReqState
{
get
{
return (this.HttpContext.Session["ReqState"] as int?).GetValueOrDefault(-1);
}
set
{
this.HttpContext.Session["ReqState"] = value;
}
}
答案 1 :(得分:0)
假设在调用Action方法(_reqState
)和条件检查之间或在控制器构造函数中没有更改Get()
的值 - 那么条件始终为真。 / p>
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
值。