ASP.NET: UrlReferer имеет неправильное значение, опрашивая на статической (webmethod) странице, вызываемой из jquery - PullRequest
0 голосов
/ 02 декабря 2009

Может кто-нибудь помочь? Я пытаюсь опросить 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 ]

1 голос
/ 02 декабря 2009

Этот скрипт размещен на вашей странице, верно? В этом случае рефералом будет ваш сайт.

Если вам нужен реферер для самой страницы, вам нужно передать его в качестве аргумента при вызове Ajax; он не будет присутствовать в заголовке HTTP.

Вы можете прочитать реферер страницы из свойства document.referrer.

0 голосов
/ 02 декабря 2009

Это работает как задумано. Когда вы используете AJAX для публикации, вы отправляете запрос со своей страницы (вашего домена!) На целевой сервер.

Один из обходных путей заключается в сохранении оригинального имени хоста реферера в переменной javascript при создании страницы:

var referrerHost = '<%= HttpContext.Current.Request.UrlReferrer.Host %>';

Затем упакуйте это в переменную jsonData, отправляемую методу ProcessTracking в параметре ajax функции data.

0 голосов
/ 02 декабря 2009

Ресурсы, вызываемые с помощью запросов AJAX, будут рассматривать вызывающую страницу в качестве реферера, поэтому ваш домен отображается как реферер.

У вас была правильная идея использовать Global.asax, но попробуйте подключить метод BeginRequest:

void Application_BeginRequest(Object Sender, EventArgs e)
{
    string referrerDomain = HttpContext.Current.Request.UrlReferrer.Host ;
}
0 голосов
/ 02 декабря 2009

Конечно, он должен содержать ваш текущий домен, так что это за веб-страница, делающая сообщение?

Если вы хотите получить исходную страницу вызывающих абонентов, вам необходимо сохранить ее на исходной веб-странице, прежде чем вызывать свой код AJAX, а затем передавать его через.

...