2014-01-30 133 views
3

我在Windows服務器上運行asp.net web api應用程序。我有2個網站使用不同的IP地址。當應用程序部署在其中一個站點上時,IsLocal爲true,當在其他站點上部署時,它是錯誤的。HttpRequestMessage.IsLocal()在一個站點上的false在同一臺服務器上的另一個站點上爲true

檢查源代碼,它歸結爲:

[DllImport("aspnet_state.exe", CharSet=CharSet.Ansi)] 
    internal static extern void STWNDGetLocalAddress(IntPtr tracker, StringBuilder buf); 

這是返回本地地址的方法,爲什麼沒有第二個IP是否有效?網絡配置看起來像這樣(的0.79 IP地址是IsLocal用於返回false一)

enter image description here

如何獲得IsLocal考慮第二個IP?

+0

雖然我找不到這個問題的答案。有一種解決方法來實現您的需求@http://www.strathweb.com/2013/01/adding-request-islocal-to-asp-net-web-api/ – RCkumar

+0

看起來很整潔,但該解決方案使用STWNDGetLocalAddress所以我認爲它不會提供.79地址。 –

+0

你看過@http://stackoverflow.com/questions/11849501/how-to-filter-local-requests-in-asp-net-web-api。只是一個建議。如果已經通過它,請跳過 – RCkumar

回答

3

IsLocal回報任何的三個條件成立:

  • 請求從127.0.0.1來
  • 請求從本地主機來
  • 請求來自同一個IP來爲服務器IP

您的第一步應該是註銷傳入請求的IP,以便您確定Web API認爲是什麼源代碼。

+0

它不是本地主機,它不是127.0.0.1。但是ip地址被分配給服務器上的一個adpter。但爲什麼不是那個地方。我將添加一些日誌記錄以獲取更多上下文。如果服務器有多個IP地址,什麼是「服務器IP」? –

相關問題