jQuery+WebMethod+UrlRewriting: как отличить параметр от имени метода сервера

Мой веб-сайт ASP.NET преобразует такие URL-адреса, как http://smth.com/player/1234, в запрос на Страница "игрока" с параметром id=1234

На странице мне нужно сделать веб-запрос к методу «GetData» на этой странице. Я хотел бы сделать запрос с помощью jQuery. Все учебные пособия, которые я нашел (http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/, например) предлагает передать имя URL/метода в параметре 'url' в '$.ajax'

$.ajax({
  type: "POST",
  url: "PageName.aspx/MethodName", // in my case that will be ... what?
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
    // Do something interesting here.
  }
});

Проблема в том, что если я укажу "player/1234/GetData", то запрос будет выполнен на странице "player", но ASP.NET не будет вызывать метод GetData...

Должен ли я реализовать пользовательскую логику на этой странице и вызвать GetData для выполнения веб-запроса? Если да, то как я могу определить, что запрос выполняется к WebMethod?

Или я должен указать «простой» URL-адрес, например http://smth.com/player.aspx?Id=1234/GetData

Я наверное что-то пропустил? Может быть, jquery позволяет указать «имя метода» в отдельном поле? Или я должен настроить свой веб-сайт для правильной обработки этого?

Пожалуйста, порекомендуйте. Любые идеи приветствуются!


person Budda    schedule 16.03.2013    source источник


Ответы (2)


Будда, я видел ваш вопрос, когда у меня была такая же проблема.

Мое решение, вероятно, не самое лучшее, состояло в том, чтобы добавить к моим вызовам поддельное расширение, в моем случае «jq», например:

url: "<%: ResolveUrl("~/PagePath/PageName.aspx") %>/WebMethod.jq"

Поскольку у меня есть одно правило для удаления расширения и другое для добавления косой черты в конце URL-адреса, мне нужно использовать <%: ResolveUrl("~/PagePath/PageName.aspx") %>. Это потому, что когда я захожу на страницу, мой URL-адрес http://hostname/PagePath/PageName/, и если я вызываю WebMethod через ajax, URL-адрес будет выглядеть как http://hostname/PagePath/PageName/PageName.aspx/WebMethod.jq.

После того, как вы добавили это поддельное расширение, вам нужно будет добавить новое правило перезаписи, чтобы удалить его перед окончательным выполнением:

<rule name="Clean Page WebMethods">
   <match url="(.*)\.jq$" />
   <action type="Rewrite" url="{R:1}" redirectType="Permanent" />
</rule>

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

<add input="{R:2}" negate="true" pattern="\.jq" />

Я использую {R:2}, потому что обнаружил, что модуль перезаписи URL-адресов не принимает WebMethod.jq как часть URL-адреса, если он находит расширение aspx. {R:2} будет для моего шаблона, но он может измениться для шаблона ваших правил.

Это может показаться слишком сложным для простого использования Page WebMethod, но после первоначальной настройки вам просто нужно будет добавить расширение .jq для ваших вызовов в ваших сценариях.

Надеюсь, это поможет вам!

person Eduardo Roth    schedule 14.05.2013
comment
Что ж, это не решит вашу проблему, но я оставлю ответ там, если кто-то попадет в пост с такой же проблемой. - person Eduardo Roth; 15.05.2013

Не знаю, как решить проблему.. поэтому вместо этого я делаю запрос к веб-службе (URL-адрес содержит .asmx, который обходит перезапись URL-адреса)...

Если знаете как решить исходную проблему - подскажите!

person Budda    schedule 02.04.2013