如何通过 HTTP 方法修改 NET API 控制器 class 的 属性
How to modify the property of a NET API controller class by HTTP methods
我想要一个 API,每当调用“add”get 方法时,整数都会增加 1。这是我的代码:
namespace test.Controllers
{
[Route("api/[controller]")]
public class testController : Controller
{
private int x;
public testController(){
x = 0;
}
[HttpGet]
public JsonResult Get(){return Json(x);}
[HttpGet("add")]
public JsonResult Add(){
x++;
return Json(x);
}
}
}
我意识到,如果我修改控制器的构造函数class:
public testController(){
x = 0;
x++;
}
当我转到“索引”时,x的值将是1。在我看来,我可以在构造函数中更改x的值,但我根本无法在其中更改x的值一个 HTTP 方法。
我尝试通过制作一个“普通”的class方法来解决问题,使用HTTP方法调用此方法修改x的值:
private void add() { x++; }
[HttpGet("add")]
public JsonResult Add(){
add();
return Json(x);
}
我认为,如果构造方法可以工作,那么 class 方法也应该可以工作。但是,它仍然不起作用。我不明白为什么以及如何解决这个问题?
为每个请求创建一个控制器,所以如果你想增加一些持久数据,它需要存储在其他地方。静态字段可以工作,例如
namespace test.Controllers
{
[Route("api/[controller]")]
public class testController : Controller
{
private static int x = 0;
public testController(){
}
[HttpGet]
public JsonResult Get(){return Json(x);}
[HttpGet("add")]
public JsonResult Add(){
x++;
return Json(x);
}
}
}
我想要一个 API,每当调用“add”get 方法时,整数都会增加 1。这是我的代码:
namespace test.Controllers
{
[Route("api/[controller]")]
public class testController : Controller
{
private int x;
public testController(){
x = 0;
}
[HttpGet]
public JsonResult Get(){return Json(x);}
[HttpGet("add")]
public JsonResult Add(){
x++;
return Json(x);
}
}
}
我意识到,如果我修改控制器的构造函数class:
public testController(){
x = 0;
x++;
}
当我转到“索引”时,x的值将是1。在我看来,我可以在构造函数中更改x的值,但我根本无法在其中更改x的值一个 HTTP 方法。
我尝试通过制作一个“普通”的class方法来解决问题,使用HTTP方法调用此方法修改x的值:
private void add() { x++; }
[HttpGet("add")]
public JsonResult Add(){
add();
return Json(x);
}
我认为,如果构造方法可以工作,那么 class 方法也应该可以工作。但是,它仍然不起作用。我不明白为什么以及如何解决这个问题?
为每个请求创建一个控制器,所以如果你想增加一些持久数据,它需要存储在其他地方。静态字段可以工作,例如
namespace test.Controllers
{
[Route("api/[controller]")]
public class testController : Controller
{
private static int x = 0;
public testController(){
}
[HttpGet]
public JsonResult Get(){return Json(x);}
[HttpGet("add")]
public JsonResult Add(){
x++;
return Json(x);
}
}
}