ASP.NET: UrlReferer имеет неправильное значение, опрашивая на статической (webmethod) странице, вызываемой из jquery
Кто-нибудь может помочь? Я пытаюсь опросить UrlReferer, который должен содержать Google.com, но он содержит мой текущий сайт. Моя веб-страница является стандартной страницей HTM, и jquery вызывает статический метод, например
[WebMethod]
public static void ProcessTracking(string jsonString)
Внутри этого метода я делаю стандартный поиск на Request.UrlReferrer, как это
string referrerDomain = HttpContext.Current.Request.UrlReferrer.Host ;
Но он всегда содержит мой текущий домен, это было немного подозрительно, поэтому я создал стандартную страницу asp.net и сделал то же самое, и она работает на 100% без проблем..
Таким образом, кажется, что когда моя страница htm вызывает через jquery, мой webmethod (статический) и опрашивает UrlReferrer
это возвращение ALWAYS
мой текущий сайт, который не так.
Кто-нибудь знает работу вокруг?
Я даже пытался сделать что-то в session_start
и т. д. в global.asax
но не исправить.
РЕДАКТИРОВАТЬ: Как я называю страницу из jquery в HTML
$.ajax({
type: "POST",
url: "MyService.aspx/ProcessTracking",
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function(msg) {
},
error: function(msg) {
alert(error);
}
});
4 ответа
Этот скрипт размещен на вашей странице, верно? В этом случае рефералом будет ваш сайт.
Если вам нужен реферрер для самой страницы, вам нужно передать его в качестве аргумента при вызове Ajax; он не будет присутствовать в заголовке HTTP.
Вы можете прочитать реферар страницы из document.referrer
имущество.
Конечно, он должен содержать ваш текущий домен, так как веб-страница делает сообщение?
Если вы хотите получить исходную страницу вызывающих абонентов, вам необходимо сохранить ее на исходной веб-странице, прежде чем вызывать код ajax, а затем передавать его.
Это работает как задумано. Когда вы используете AJAX для публикации, вы отправляете запрос со своей страницы (вашего домена!) На целевой сервер.
Один из обходных путей - сохранить имя хоста исходного реферера в переменной javascript при создании страницы:
var referrerHost = '<%= HttpContext.Current.Request.UrlReferrer.Host %>';
Затем упакуйте это в jsonData
переменная, которую вы отправляете в ProcessTracking
метод в ajax
функция-х data
параметр.
Ресурсы, вызываемые с помощью запросов AJAX, будут рассматривать вызывающую страницу в качестве реферала, поэтому ваш домен отображается в качестве реферала.
У вас была правильная идея использовать Global.asax, но попробуйте подключить метод BeginRequest:
void Application_BeginRequest(Object Sender, EventArgs e)
{
string referrerDomain = HttpContext.Current.Request.UrlReferrer.Host ;
}