Web API自托管主机 - 在所有网络接口上绑定

gov*_*vin 26 c# asp.net self-hosting asp.net-web-api2

如何在所有网络接口上进行Web API自主绑定?

我目前有以下代码.不幸的是,它仅绑定在localhost上.因此,从localhost以外的地方访问此服务器失败.

var baseAddress = string.Format("http://localhost:9000/"); 
            using (WebApp.Start<Startup> (baseAddress)) 
            {
                Console.WriteLine("Server started");
                Thread.Sleep(1000000);
            }
Run Code Online (Sandbox Code Playgroud)

evi*_*laf 39

只需像这样更改基址

        var baseAddress = "http://*:9000/"; 
        using (WebApp.Start<Startup> (baseAddress)) 
        {
            Console.WriteLine("Server started");
            Thread.Sleep(1000000);
        }
Run Code Online (Sandbox Code Playgroud)

它应该正确绑定到所有接口.

  • "+和\*之间有什么区别?" 请参阅[UrlPrefix Strings](https://msdn.microsoft.com/en-us/library/aa364698(v = vs.85).aspx).'+'是强大的通配符,'*'是弱通配符.Strong这意味着首先针对此绑定测试传入请求上的主机名,而在任何其他绑定(例如指定显式主机名的绑定)之后应用弱绑定('\*').因此,您可以根据传入的URL设置绑定以提供不同的资源,并且'\*'绑定会选择未明确绑定的任何内容. (15认同)
  • 我似乎有人使用http:// +:9000 /.+和*之间有什么区别?@ mauriciod73 (7认同)
  • 如果您获得Target Invocation Exception并且"Access is denied",则以visual admin身份运行visual studio (7认同)

Dan*_*ler 6

使用以下方法绑定它:

var baseAddress = string.Format("http://localhost:+:9000/"); 
Run Code Online (Sandbox Code Playgroud)

如果您获得访问异常,请不要以管理员用户身份启动Visual Studio.请改为添加网址.以管理员身份启动命令控制台窗口并执行:

netsh
netsh> http add urlacl url="http://+:9000/" sddl=D:(A;;GX;;;S-1-1-0)
Run Code Online (Sandbox Code Playgroud)

SDDL转换为当前域/机器的"所有用户".