2014-04-01 3 views
5

मैंने आने वाली कॉल लॉग करने के लिए एक वेब एपीआई कस्टम एक्शन फ़िल्टर बनाया है। मैं कॉलर का आईपी पता पाने की कोशिश कर रहा हूं और जो कुछ भी मैंने पाया है, वह Request.UserHostAddress का उपयोग करने के लिए कहता है। समस्या यह है कि कोई फर्क नहीं पड़ता कि कॉल कहां से आ रहा है, आईपी वही है।WebAPI कस्टम एक्शन फ़िल्टर में Request.UserHostAddress प्राप्त करते समय मुझे हमेशा एक ही आईपी क्यों मिलता है?

public class LogActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     var name = actionContext.ActionDescriptor.ActionName; 

     // Get the sender address 
     var caller = ((HttpContextWrapper)actionContext.Request.Properties["MS_HttpContext"]).Request.UserHostAddress; 

     // Log the call 
     SystemBL.InsertSiteLog("WebAPI:" + name, "From:" + caller); 
    } 
} 

मैं भी साथ की कोशिश की है:

यहाँ मेरी कार्रवाई फ़िल्टर के लिए कोड है

var caller = ((HttpContextWrapper)actionContext.Request.Properties["MS_HttpContext"]).Request.ServerVariables["REMOTE_ADDR"].ToString(); 

लेकिन परिणाम एक ही था। कोई विचार?

उत्तर

7

यहां जवाब मिला: HttpContext.Current.Request.UserHostAddress is null

मूल रूप से, मुझे अग्रेषण को हल करने की आवश्यकता थी। अंतिम कोड है:

public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     var name = actionContext.ActionDescriptor.ActionName; 

     // Get the sender address 
     var myRequest = ((HttpContextWrapper)actionContext.Request.Properties["MS_HttpContext"]).Request; 
     var ip = myRequest.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
     if (!string.IsNullOrEmpty(ip)) 
     { 
      string[] ipRange = ip.Split(','); 
      int le = ipRange.Length - 1; 
      string trueIP = ipRange[le]; 
     } 
     else 
     { 
      ip = myRequest.ServerVariables["REMOTE_ADDR"]; 
     } 

     // Log the call 
     SystemBL.InsertSiteLog("WebAPI:" + name, "From:" + ip); 
    } 

सभी को धन्यवाद। मैं इसे दो दिनों में जवाब के रूप में चिह्नित करूंगा जब यह मुझे देता है।

+0

क्या यहां एचटीपीएक्शन कॉन्टेक्स्ट पैरामीटर का उपयोग करना बेहतर है और आईपी प्राप्त करना या बेहतर समाधान स्थिर विधि का उपयोग करना है जो एचटीपी कॉन्टेक्स्ट का उपयोग यहां करता है: [link] (https://stackoverflow.com/questions/1907195/how- टू-गेट-आईपी-एड्रेस) मुझे यकीन नहीं है कि मैंने किस दृष्टिकोण को चुना होगा। – krypru

+1

ऐसा कुछ समय हो गया है जब से मैंने ऐसा किया लेकिन मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप इसका उपयोग कहां कर रहे हैं। मेरे मामले में मैं इसे फ़िल्टर विशेषता में कर रहा था जिसके पास HttpContext से वर्तमान संदर्भ तक पहुंच नहीं है। यदि आप इसे नियमित एमवीसी एक्शन में कर रहे हैं तो मैं कहूंगा कि एचटीपी कॉन्टेक्स्ट का उपयोग करें क्योंकि यह थोड़ा क्लीनर लगता है। बस पता पार्सिंग करना न भूलें और सूची में अंतिम आईपी का उपयोग करें। – Jason

संबंधित मुद्दे

 संबंधित मुद्दे