Ho creato un filtro di azione personalizzato API Web per registrare le chiamate in arrivo. Sto cercando di ottenere l'indirizzo IP del chiamante e tutto quello che ho trovato dice di usare Request.UserHostAddress
. Il problema è che indipendentemente da dove arriva la chiamata, l'IP è lo stesso.Perché ottengo sempre lo stesso IP quando ottengo Request.UserHostAddress nel filtro di azione personalizzato WebAPI?
Ecco il codice per il mio filtro azione:
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);
}
}
Ho anche provato con:
var caller = ((HttpContextWrapper)actionContext.Request.Properties["MS_HttpContext"]).Request.ServerVariables["REMOTE_ADDR"].ToString();
ma il risultato era lo stesso. Qualche idea?
È meglio usare il parametro HttpActionContext come qui e ricevere l'IP o la soluzione migliore è usare il metodo statico che usa HttpContext come qui: [link] (https://stackoverflow.com/questions/1907195/how- to-get-ip-address) Non sono sicuro di quale approccio scegliere. – krypru
È passato un po 'di tempo da quando l'ho fatto, ma penso che dipenda da dove lo stai usando. Nel mio caso lo stavo facendo in un attributo filtro che non ha accesso al contesto corrente da HttpContext. Se lo stai facendo in una normale azione MVC, direi che uso HttpContext come sembra un po 'più pulito. Basta non dimenticare di fare l'analisi dell'indirizzo e utilizzare l'ultimo ip nell'elenco. – Jason