为什么 POST 没有更改我的项目中的源代码?使用 Visual Studio 进行编辑,以及 ASP.NET Core Web API。
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
namespace CountryAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AppController : ControllerBase
{
private List<string> weekDay = new List<string>()
{
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
};
// GET: api/App
[HttpGet]
public IEnumerable<string> Get()
{
return weekDay;
}
// POST api/App
[HttpPost]
public IActionResult Post([FromBody] string value)
{
if (string.IsNullOrEmpty(value))
{
return BadRequest("Value cannot be null or empty.");
}
weekDay.Add(value);
return Ok(); // Return 200 OK if successful
}
}
}
预期使用 POST 修改列表,但 GET 未显示对列表的更改
每次向控制器发出请求时,都会创建控制器的一个新实例。因此,weekDay 列表会针对每个请求使用其默认值重新初始化,并且 POST 请求期间所做的任何更改都不会在不同的请求中保留。
要跨请求持久更改,您可以通过多种方式实现。通过阅读您的代码逻辑,我建议您使用比控制器寿命更长的服务。您可以使用依赖注入来实现这一点,方法是注册一个服务,其范围在多个请求中持续存在(例如,单例或范围)。
1.创建接口
public interface IWeekDayService
{
List<string> GetWeekDays();
void AddWeekDay(string value);
}
2.实施服务
public class WeekDayService : IWeekDayService
{
private List<string> weekDay = new List<string>()
{
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
};
public List<string> GetWeekDays()
{
return weekDay;
}
public void AddWeekDay(string value)
{
weekDay.Add(value);
}
}
3.注入服务
public class AppController : ControllerBase
{
private readonly IWeekDayService _weekDayService;
public AppController (IWeekDayService weekDayService)
{
_weekDayService = weekDayService;
}
[HttpGet]
public IEnumerable<string> Get()
{
return _weekDayService.GetWeekDays();
}
// POST api/App
[HttpPost]
public IActionResult Post([FromBody] string value)
{
if (string.IsNullOrEmpty(value))
{
return BadRequest("Value cannot be null or empty.");
}
_weekDayService.AddWeekDay(value);
return Ok(); // Return 200 OK if successful
}
}
4.注册服务
builder.Services.AddSingleton<IWeekDayService, WeekDayService>(); // Singleton service