c# - Web Api 和外部事件处理

标签 c# asp.net-mvc-4 asp.net-web-api windows-services

我有一个 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。我确实找到了这个,它看起来可以解决您的问题。

http://blogs.taiga.nl/martijn/2011/07/28/loosely-coupled-events-in-net-and-harvesting-open-source-projects/

关于c# - Web Api 和外部事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19659733/

相关文章:

c# - 解析 XSD 架构时出错 - 未定义的复杂类型

javascript - 使用 Javascript 或 C# 从 Office 365 Outlook 加载项创建 .msg 文件

c# - Web API 获取在 Controller 上进行 UrlEncoded 的请求参数

c# - 如何在 Web API Controller 中接收字节数组和 json

c# - 在 Azure 中创建表时出现异常

c# - System.convert.ToString() 与 C# 中的显式类型转换

asp.net-mvc - MVC Web Api - 准系统最小项目结构

c# - 在 WebAPI 中使用自定义 IHttpActionInvoker 进行异常处理

c# - 在 C# 中控制或访问打印机的自定义打印机设置(旋转 180 度)

c# - 如何在asp.net core 2.2中注册IFileProvider进行依赖注入(inject)?