从控制台项目 class 访问 asp.net web-api 项目 class 中的静态 属性

Accessing a static property in a asp.net web-api project class from a console project class

我有一个 C# 解决方案,它包含 2 个项目:一个控制台项目和一个 asp.net web-api 项目(REST 服务);如果我从 REST 客户端(例如 Fiddler)更改 REST class 中的静态 属性,并且在我使用它的 [=32= 检索此静态 属性 的值之后] 从控制台的 class 我获得了一个不同的值(在代码下方)。欢迎任何建议!

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。

静态属性只对当前进程通用。您在这里有两个进程 - 一个控制台应用程序和一个休息客户端。

要在两者之间共享数据,您可以将数据保存到数据库中,但也许更好的方法是让控制台应用程序调用其余客户端并从中获取当前状态。

您当前的 "call to the rest client" 仅使用 ValuesController.getState(); 从 ValuesController class 访问静态 属性。要从其余客户端进程中获取值,您需要使用 WebClient(或类似)调用其余 api 进程。