我有一个 Windows 服务,我想在此服务上公开一个 Web API,以便我们的用户可以通过 http 与该服务进行交互。
我知道如何做一个自托管 web api ( http://www.asp.net/web-api/overview/hosting-aspnet-web-api/self-host-a-web-api ),现在我的主要问题是如何将我的 ApiController 与它将被执行的类连接起来,这样当一个 http 请求被处理时,一个事件是触发,并且在 ApiController 之外发生了一些事情。
根据以下示例,如何在我的服务类中注册我的事件处理程序 UserRegistered?
网络 API Controller
public class MyController : ApiController
{
public delegate void OnPostRegister(Profile user);
public event OnPostRegister UserRegistered;
public void PostStream(Profile user)
{
try
{
IProfileBuilder builder = new ProfileBuilder();
builder.RegisterProfile(user);
if (UserRegistered!= null)
{
UserRegistered(user);
}
}
catch (Exception ex)
{
throw new HttpException(500, ex.Message);
}
}
服务等级
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
//initialize web api
var config = new HttpSelfHostConfiguration("http://localhost:8080");
config.Routes.MapHttpRoute(
"API Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional });
using (var server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
}
//Load registered profiles
}
protected override void OnStop()
{
}
}
最佳答案
我不认为你可以访问 Controller 的实例来直接订阅一个事件;我认为您可能需要一个松散耦合的事件处理程序;我本来打算建议 EventAggregator,但它是 Prism 的一部分,虽然您可以提取它,但它更适合 WPF。我确实找到了这个,它看起来可以解决您的问题。
关于c# - Web Api 和外部事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19659733/