每个请求的 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
    }
}

是的,控制器的生命周期很短,就为了这个请求。之后它会被处理掉,你的价值就会丢失。

如果您想保留一些状态,您必须使用 SessionApplication 或外部存储来保存您的状态。

例如:

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值。