每个请求的 ApiController 对象 ASP.NET
An object of ApiController for each request ASP.NET
是否会在每次请求页面后创建一个 API 控制器的新对象?
所以我需要知道条件 #1 是否始终为真?
public class ProductsController : ApiController {
private int _reqState = -1;
public object Get(int id) {
if (_reqState == -1} {} //condition #1
//DO SOME WORK WITH _reqState
}
}
是的,控制器的生命周期很短,就为了这个请求。之后它会被处理掉,你的价值就会丢失。
如果您想保留一些状态,您必须使用 Session
、Application
或外部存储来保存您的状态。
例如:
private int ReqState
{
get
{
return (this.HttpContext.Session["ReqState"] as int?).GetValueOrDefault(-1);
}
set
{
this.HttpContext.Session["ReqState"] = value;
}
}
假设 _reqState
的值在调用你的 Action 方法 (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
值。
是否会在每次请求页面后创建一个 API 控制器的新对象?
所以我需要知道条件 #1 是否始终为真?
public class ProductsController : ApiController {
private int _reqState = -1;
public object Get(int id) {
if (_reqState == -1} {} //condition #1
//DO SOME WORK WITH _reqState
}
}
是的,控制器的生命周期很短,就为了这个请求。之后它会被处理掉,你的价值就会丢失。
如果您想保留一些状态,您必须使用 Session
、Application
或外部存储来保存您的状态。
例如:
private int ReqState
{
get
{
return (this.HttpContext.Session["ReqState"] as int?).GetValueOrDefault(-1);
}
set
{
this.HttpContext.Session["ReqState"] = value;
}
}
假设 _reqState
的值在调用你的 Action 方法 (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
值。