2014-10-27 60 views
19

如何使Web API自主機在所有網絡接口上綁定?Web API自主機 - 在所有網絡接口上綁定

我目前有下面的代碼。不幸的是,它只綁定在本地主機上。因此,從本地主機以外訪問此服務器失敗。

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

回答

29

只要改變基址這樣

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

它應該correctlly綁定到所有接口。

+5

我似乎有人使用http:// +:9000 /。 +和*有什麼區別? @ mauriciod73 – regisbsb 2015-06-02 11:09:13

+7

如果您獲得目標調用異常並且「訪問被拒絕」,請以管理員身份運行visual studio – Fidel 2015-08-02 17:21:12

+13

「+和\ *有什麼區別?」請參閱[UrlPrefix字符串](https://msdn.microsoft.com/en-us/library/aa364698(v = vs.85).aspx)。 '+'是強通配符,'*'是弱通配符。這裏的強意味着傳入請求上的主機名首先針對此綁定進行測試,而弱綁定('\ *')則應用於任何其他綁定之後(例如指定明確的主機名的綁定)。因此,您可以根據傳入的URL設置綁定以提供不同的資源,'\ *'綁定可以獲取任何未明確綁定的內容。 – redcalx 2015-08-12 08:42:18

5

使用綁定: -

var baseAddress = string.Format("http://localhost:+:9000/"); 

如果你訪問異常,請不要啓動Visual Studio作爲管理員用戶。改爲添加網址預訂。以管理員身份啓動命令控制檯窗口並執行:

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

SDDL轉換爲來自當前域/機器的「所有用戶」。