2013-02-15 2 views
0

Я знаю, что ASP.Net Request.Url не может дать мне deep linking URL-адрес, сгенерированный SWFAddress.Доступ к глубокому связующему URL из стороны ASP.Net Server

http://www.mysite.com/Default.aspx#/6/

ASP.Net Request.Url возвращает только

http://www.mysite.com/Default.aspx

Я нашел один вопрос, но это довольно старый - SWFAddress Deeplinks and C# library?

Есть ли библиотека/метод для доступа к глубокой связывание url с Server Side?

Спасибо!

Обновлено: Вот что я получаю, когда я достигаю /Default.aspx#/6/

? Request.Url 
{http://localhost:56476/Default.aspx} 
    AbsolutePath: "/Default.aspx" 
    AbsoluteUri: "http://localhost:56476/Default.aspx" 
    Authority: "localhost:56476" 
    DnsSafeHost: "localhost" 
    Fragment: "" 
    Host: "localhost" 
    HostNameType: Dns 
    IsAbsoluteUri: true 
    IsDefaultPort: false 
    IsFile: false 
    IsLoopback: true 
    IsUnc: false 
    LocalPath: "/Default.aspx" 
    OriginalString: "http://localhost:56476/Default.aspx" 
    PathAndQuery: "/Default.aspx" 
    Port: 56476 
    Query: "" 
    Scheme: "http" 
    Segments: {string[2]} 
    UserEscaped: false 
    UserInfo: "" 

Update: Я сожалею, что я не сделал мой вопрос ясен. Если пользовательские браузеры используют следующий URL-адрес (скорее всего, сохраненный в избранном), я бы хотел получить полный URL-адрес со стороны сервера. Вы можете перейти к этому URL-адресу; это настоящее приложение.

http://publ.com/Kgd3A5y#/13/zoomed

мое текущее решение: подписаться событие (скажем загрузку страницы) на стороне клиента. Я разбираю URL-адрес на стороне клиента и возвращаюсь на сервер с помощью ajax. Недостатком является то, что он создает две страницы.

+0

Возможно, глупый вопрос, но вы пробовали посмотреть на свойство AbsoluteUrl? – DiskJunky

ответ

0

Часть URL с # является якорем. Анкеры видны только на стороне клиента. Вам нужно иметь дело с якорями на стороне клиента, например, с помощью JavaScript, и вы можете преобразовать свой запрос в правильный URL-адрес, читаемый на стороне сервера.

Это не Asp.Net или C#. Это стандартное поведение для любой серверной технологии.

Просто процитировать стандарт RFC1808:

Обратите внимание, что идентификатор фрагмента (и «#», который предшествует ему) не рассматривается как часть URL.

Update:

Если Вы хотите отправить некоторые данные из вашего швейцарских франков на сервер Вы можете написать веб-службу на стороне сервера, а затем SWF может взаимодействовать с этой веб-службой, так что вы можете отправить любые данные, которые вам нравятся.

На стороне клиента JavaScript будет корректно отправлять URL-адрес веб-сервису.

Edit:

Mate У вас есть много запросов уже:

81 запросов | 1.37MB переданы | 24.10s (OnLoad: 2.41s, DOMContentLoaded: 2.17s)

, поэтому отправка нескольких байтов с асинхронным запросом не имеет никакого значения.

Кроме того, я не думаю, что вы можете многое сделать. Якорь полностью относится к стороне клиента, это NOT часть URL-адреса и для решения этой проблемы. Вам необходимо обработать на стороне клиента и обработать на стороне клиента. Вам нужно загрузить свой клиентский скрипт с сервера, в конце истории.

В Flash есть доступ к сокету, но он переборщил, и вы упомянули, что у вас нет доступа к SWF-коду.

Действительно, я не вижу причин изменять то, что у вас есть, и нет хорошей альтернативы.

+0

Спасибо за комментарий. Я знаю об этом; мой вопрос в том, как его решить. – Win

+0

Да, мое приложение работает так же, как с помощью ajax. Но мне не нравится запускать две загрузки страницы по первоначальному запросу. – Win

+0

Вы не должны запускать 2-страничные загрузки. Вам необходимо загрузить страницу и отправить свои данные на веб-службу с асинхронным запросом. Этот запрос может запускаться после загрузки страницы, и на практике вам не требуется никакого ответа с сервера. – rumburak

0

Нет, это не глубокая связь. Вы говорите о местных якорях. Что-то совсем другое.

Ваша проблема должна быть переопределена, а затем ее можно понять. У вас проблема не в глубокой связи. Ваша проблема заключается в том, что локальная программа генерирует локальное значение (якорь) для локальной работы.

Если вам нужна эта информация на стороне сервера (и, учитывая наше новое определение на поверхности, казалось бы, вы бы этого не сделали - местная работа и данные будут локальными), тогда вам нужно сделать одну из двух вещей.

  1. ОТМЕТЬТЕ свои требования и дизайн, чтобы не выполнять эти функции локально.

  2. IMPLEMENT связь между локальным процессом и вашим сервером для передачи этой информации.


Основываясь на комментарии и думать об этой проблеме:

Вы можете реализовать решение легко со следующим изменением ваших требований (# 1 выше)

Вместо того, чтобы использовать ссылку это выглядит так

http://www.mysite.com/Default.aspx#/6/ 

Используйте ссылки, которые выглядят ниже

http://www.mysite.com/Default.aspx/6/ 

или

http://www.mysite.com/Default.aspx?6/ 

Эти фактические «глубокие ссылки» и на стороне сервера будут иметь возможность видеть их, ваша библиотека будет также быть в состоянии справиться с ними. (Исходя из быстрого сканирования документации, к которой вы подключились.)

+0

Благодарим за комментарий. Адрес SWF называют его глубоким связыванием. Я не знаю, правильно это или нет. Http: //www.asual.com/swfaddress/ – Win

+0

@Win - см. edit :) – Hogan

+0

FlippingBook - это стороннее приложение, которое тесно синхронизируется с глубокими связующими URL-адресами SWFAddress (в моем вопросе вы можете увидеть демонстрационную ссылку). Мое текущее решение - разобрать URL-адрес на стороне клиента и вернуться к серверу с помощью ajax. Но мне не нравится запускать две загрузки страницы по первоначальному запросу. Спасибо за ваш совет. – Win