ASP.NET Web API在单个服务中自我托管HTTPS和HTTP?

时间:2013-01-23 16:02:37

标签: .net asp.net-web-api

我有一个公开的自我托管的ASP.NET Web API服务,它公开了两个控制器。其中一个我想只能通过HTTPS访问,另一个我不能访问。这可以在一个服务中完成吗?如果是这样,你能提供一些提示吗?看起来我需要注册两个基地址,但我不知道单个服务是如何实现的。

2 个答案:

答案 0 :(得分:7)

您需要创建两个HttpServer实例,一个用于http,另一个用于https。我一直试图找出为什么存在这种限制因为我知道HttpListener可以处理同一个监听器的注册。

无论如何,如果创建两个HttpServer实例真的不适合你,那么你需要查看Katana项目和Microsoft.Owin.HttpListener。这确实支持多个地址但不幸的是默认的Katana启动代码没有!但我有良好的权限,有一种方法可以在启动时自定义HttpListener,使其成为可能。

答案 1 :(得分:0)

因为HttpListenerBase(ServiceStack.Host.HttpListener)在启动时没有覆盖其监听器(如果不是null),那么可以在继承自HttpListenerBase的主机类中完成以下操作:

public override ServiceStackHost Start(string urlBaseNoPrefix)
{
    // Here urlBaseNoPrefix is something like "web.acme.com/app/" 
    Listener = new System.Net.HttpListener();
    Listener.Prefixes.Add("http://" + urlBaseNoPrefix);
    base.Start("https://" + urlBaseNoPrefix);
    return this;
}