每个请求ASP.NET的ApiController对象

时间:2017-06-13 10:14:24

标签: c# asp.net-mvc asp.net-apicontroller

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
    }
}

2 个答案:

答案 0 :(得分:1)

是的,控制器的生命周期很短,仅适用于此请求。之后它被处理掉了,你的价值就会丢失。

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

例如:

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