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