从控制台项目类访问asp.net web-api项目类中的静态属性
本文关键字:项目 静态 web-api 属性 asp 控制台 访问 net | 更新日期: 2023-09-27 18:05:26
我有一个c#解决方案,由2个项目组成:一个控制台项目和一个asp.net web-api项目(REST服务);如果我从REST客户端(例如Fiddler)更改REST类中的静态属性,并且在我通过使用控制台类的getter来检索该静态属性的值之后,我将获得不同的值(在代码下面)。欢迎提出任何建议!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RestLayer.Controllers;
using System.Web.Http;
namespace ValController
{
class Program
{
static void Main(string[] args)
{
....
var t1 = Task.Factory.StartNew(() =>
{
string stat = "disabled";
while (true)
{
System.Threading.Thread.Sleep(100);
var stat = ValuesController.getState();
}
});
t1.Wait();
Console.WriteLine("t1 has completed.");
}
}
}
REST服务:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using RestLayer.Models;
namespace RestLayer.Controllers
{
public class ValuesController : ApiController
{
private static String state = "enabled";
// POST api/values
public IEnumerable<string> Post(Command command)
{
if (command.Instruction == "enableBV")
{
state = "enabled";
}
else if (command.Instruction == "disableBV")
{
state = "disabled";
}
return new string[] { "state", state };
}
public static String getState()
{
return state;
}
public static void setState(String newState)
{
state = newState;
}
}
}
我使用的REST客户端是Fiddler。总之,我在Program.cs中检索的var stat的值与我通过使用POST设置的值(state)不同。
静态属性仅适用于当前进程。这里有两个进程——一个控制台应用程序和一个rest客户端。
要在两者之间共享数据,您可以将数据持久化到数据库中,但也许更好的方法是让控制台应用程序调用其他客户端并从中获取当前状态。
你当前的"调用其余客户端"只是访问静态属性从ValuesController类使用ValuesController.getState();
。要从其余客户端进程获取值,您需要使用WebClient(或类似的)调用其余api进程。