6

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

4

2 回答 2

7

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

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

于 2013-01-23T16:18:45.797 回答
0

因为 HttpListenerBase(ServiceStack.Host.HttpListener)在启动时如果不为空则不会覆盖其侦听器,因此可以在继承自 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;
}
于 2015-03-22T13:49:03.497 回答