我正在尝试将webapi(owin.selfhosting)支持添加到现有的C#控制台应用程序,我遇到了来自控制器的回调问题。基本上我需要调用一个函数作为对http请求的反应。 我认为代表/活动是可能的,但到目前为止还没有成功。
使用静态事件似乎有效,我使用了此视频(https://www.youtube.com/watch?v=jQgwEsJISy0)中描述的标准模式,并在事件声明之前添加了静态关键字。但是将静态委托与非静态用户混合可能不是最好的做法。
代码示例:
//appcontroller.cs
public class AppController : ApiController
{ public delegate void EventHandler(object source, EventArgs args);
public static event EventHandler EventRecived;
protected virtual void OnEventRecived(string arg)
{
if( EventRecived != null)
{
EventRecived(this, arg);
}
}
[Route("api/{arg}")]
public void GetFoo(string arg)
{
/*
*
*/
OnEventRecived();
}
}
//program.cs
class Program
{ static void Main(string[] args)
{ WebApp.Start<Startup>(url: baseAddress);
SomeClass obj = new SomeClass();
AppController.EventHandler+=obj.OnRecivedEvent;
while (true)
{ //do work
}
}
}
class SomeClass
{ public SomeClass() {}
public void OnRecivedEvent(object sender, EventArgs e)
{
Foo(e);
}
public void Foo(string arg)
{
//do something
Console.WriteLine("request of "+arg);
}
}
对http://localhost:8080/api/holy_grail
的http get请求示例 Console output >>request of holy_grail