2013-03-16 4 views
0
веб-сайт

Мои ASP.NET преобразует URL-адреса, как http://smth.com/player/1234 в запрос на «игрока» страницы с параметром ID = 1234Jquery + WebMethod + UrlRewriting: как отличить параметр от имени метода сервера

На странице мне нужно сделать веб-запрос к методу 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. 
    } 
}); 

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

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

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

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

Просьба сообщить. Любые идеи приветствуются!

ответ

0

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

Если вы знаете, как решить исходную задачу - пожалуйста консультировать!

0

Budda, я видел ваш вопрос, имея такую ​​же проблему.

Мое решение, вероятно, не лучший, должен был добавить поддельный расширение на мои звонки, в моем случае «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}, потому что я обнаружил, что Rewrite модуль URL не принимает WebMethod.jq как часть URL-адреса, если он содержит расширение aspx. {R:2} будет для моего шаблона, но он может измениться для шаблона ваших правил.

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

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

+0

Ну, это не решает вашу проблему, но я оставлю ответ там, если кто-то попадет в сообщение с той же проблемой. –

Смежные вопросы