Sho*_*jaz 5 c# asp.net-mvc asp.net-mvc-3 asp.net-web-api
我正在ASP.NET MVC3中开发REST API应用程序.我试图让客户端客户端HOST名称在行动但不能成功.我在多个应用程序中使用此API,因此我想记录域名.
HttpContext.Current.Request.UserHostAddress;
System.Web.HttpContext.Current.Request.UserHostName;
System.Web.HttpContext.Current.Request.UserHostAddress;
Run Code Online (Sandbox Code Playgroud)
private string GetClientIp(HttpRequestMessage request)
{
if (request.Properties.ContainsKey("MS_HttpContext"))
{
return ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress;
}
else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
{
RemoteEndpointMessageProperty prop;
prop = (RemoteEndpointMessageProperty)request.Properties[RemoteEndpointMessageProperty.Name];
return prop.Address;
}
else
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
所有这些选项提供IP地址,但我想获得主机名
API控制器 www.myapi.com
public class TESTController : ApiController
{
public TESTController()
{
}
[HttpGet]
public object Add(string data = "")
{
try
{
string result = "0";
if (!string.IsNullOrEmpty(data))
{
//should be www.myapiconsume.com
var host = System.Web.HttpContext.Current.Request.UserHostName;
var ip = System.Web.HttpContext.Current.Request.UserHostAddress;
}
return new { response = result };
}
catch (Exception ex)
{
throw ex;
}
}
}
Run Code Online (Sandbox Code Playgroud)
从不同的域 www.myapiconsume.com 调用API Action
public class HomeController : Controller
{
public ActionResult Index()
{
var url = "http://myapi.com/api/test/add?data={0}";
url = string.Format(url, "{ data}");
WebClient client = new WebClient();
var result = client.DownloadString(url);
return Content(result);
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能得到这个?
不幸的是,默认情况下不提供它;如果您在同一网络上,您可以尝试:
var result = System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables("remote_addr"));
Run Code Online (Sandbox Code Playgroud)
但如果客户端通过代理等访问,也可能会出现问题。
| 归档时间: |
|
| 查看次数: |
9216 次 |
| 最近记录: |