【问题标题】:How to modify the property of a NET API controller class by HTTP methods如何通过 HTTP 方法修改 NET API 控制器类的属性
【发布时间】:2021-08-10 22:19:59
【问题描述】:

我想要一个 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);
        }
    }
}

我意识到,如果我修改控制器类的构造函数:

public testController(){
            x = 0;
            x++;
}

当我转到“索引”时,x 的值为 1。在我看来,我可以在构造函数中更改 x 的值,但我根本无法在 HTTP 中更改 x 的值方法。

我尝试通过制作一个“普通”的类方法来解决问题,并使用HTTP方法调用该方法来修改x的值:

private void add() { x++; }

[HttpGet("add")]
public JsonResult Add(){
    add();
    return Json(x);
}

我认为,如果构造方法可以工作,那么类方法也应该可以工作。但是,它仍然不起作用。我不明白为什么以及如何解决这个问题?

【问题讨论】:

    标签: c# api asp.net-core asp.net-apicontroller


    【解决方案1】:

    为每个请求创建一个控制器,因此如果您想增加一些持久性数据,则需要将其存储在其他地方。静态字段可以工作,例如

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

    【讨论】:

    • 非常感谢!仅供其他读者参考的一件事,似乎在类外声明变量是非法的,所以我在控制器类中声明了静态变量,然后它就可以正常工作了。再次感谢您的回答!
    • 是的,这是一个错字,现在已修复。 C# 没有在类外部声明的全局变量。
    猜你喜欢
    • 2012-12-02
    • 2015-06-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2012-05-30
    相关资源
    最近更新 更多