我正在开发一个webapi,我目前正在执行基本身份验证,但我还想检查api是从特定域调用的,如何检查api的调用是否来自特定的域?
我正在使用另一个带有HttpClient的C#应用程序测试它,请求正在成功但没有设置Origin头。
这是电话:
var client = new HttpClient();
client.BaseAddress = new Uri("http://xxxxxxx.apphb.com/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", "username", "password"))));
var obj = new { Name = "Test", ManageInternal = true, Signers = "test1,test2,test3" };
var response = client.PostAsJsonAsync("api/document/postdocument", obj).Result;
答案 0 :(得分:1)
如果您正在寻找获取客户端的IP地址,您可以这样做:
if (request.Properties.ContainsKey("MS_HttpContext"))
{
var httpContext = (HttpContextBase)request.Properties["MS_HttpContext"];
ipAddress = httpContext.Request.UserHostAddress;
}
else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
{
RemoteEndpointMessageProperty prop;
prop = (RemoteEndpointMessageProperty)
request.Properties[RemoteEndpointMessageProperty.Name];
ipAddress = prop.Address;
}
但IP地址可能会被欺骗。
答案 1 :(得分:0)
浏览器对JavaScript实施相同的原始政策。 CORS是解决方法的一种方法,使用CORS时,涉及到Origin头。您拥有的客户端代码位于C#中,这意味着它在服务器中运行。非JavaScript客户端没有相同的源策略或CORS。那么,为什么需要原始标题?顺便说一句,任何人都可以使用他们想要的任何值发送Origin标头。