添加FriendlyUrls时,jQuery ajax调用不能使用ASP.Net Web窗体

dhr*_*tel 5 asp.net ajax jquery webforms friendly-url

如果没有为ASP.Net Web窗体项目打开FriendlyUrls,以下代码可以正常工作:

<script type="text/javascript">
    $(document).ready(function () {

        $.ajax({
            url: '/Default.aspx/GetData',
            type: 'POST',                
            beforeSend: function( xhr ) {
                xhr.setRequestHeader("Content-type", 
                     "application/json; charset=utf-8");
            },
            success: function (result) {
                var resultData = (result.d? result.d : result);
                alert(resultData);
            },
            error : function(){
                alert('error');
            }
        });

    });
</script>
Run Code Online (Sandbox Code Playgroud)

这是页面方法的服务器端代码(WebMethod):

[System.Web.Services.WebMethod]
public static string GetData()
{                        
    return "Hello";
}
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中加载页面时,我可以看到响应为{ "d" : "Hello" },这是预期的结果.

现在,如果使用NuGet包Microsoft.AspNet.FriendlyUrls添加友好URL ,则相同的代码将不起作用.当FriendlyUrls打开时,我将jquery ajax调用中的url更改为"/ Default/GetData",但后来我不会收到预期的结果.而是我收到Default.aspx页面的html.

我正在努力找出为什么这不起作用,我唯一改变的是为FriendlyUrls添加nuget包!

我一直试图找到解决方案,我能找到的最接近可读答案是:

使用jQuery for AJAX和ASP.NET Webforms

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

请注意,给定答案中的所有相关帖子都不使用FriendlyUrls.我也看到了一些答案,表明jquery ajax调用可以与MVC,WebAPI一起使用,但我的项目仅限于使用ASP.Net Web Forms.

我做错了什么或错过了什么吗?有没有人遇到过他们项目的相同场景?如果是这样,你能否回答一下如何解决这个问题?非常感谢您花时间阅读和回复.

Joh*_*ton 9

在花了太多时间之后,我发现我需要在App_Start/RouteConfig.cs中更改它:

//settings.AutoRedirectMode = RedirectMode.Permanent;
settings.AutoRedirectMode = RedirectMode.Off;
Run Code Online (Sandbox Code Playgroud)


dhr*_*tel 6

所以,最终我通过对我的项目进行以下更改来解决我的问题:

  1. 将FriednlyUrls添加到项目中.

  2. 删除RegisterRoutes方法中的行,该方法settings.AutoRedirectModeApp_Start/RouteConfig.cs中设置属性

    (请注意,将其设置为RedirectMode.Permanent或RedirectMode.Off对我来说不起作用)

  3. system.web部分下,在web.config中添加授权,如下所示

    <authorization>
        <allow users="*" />
    </authorization>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 修改ajax调用设置中的url以使用Microsoft.AspNet.FriendlyUrls.Resolve函数以获取正确的url,如下所示:

    <script type="text/javascript">
       $(document).ready(function () {
           $.ajax({
              url: '<%=Microsoft.AspNet.FriendlyUrls.FriendlyUrl.Resolve("/Default.aspx/GetData")%>',
              type: 'POST',                
              contentType: 'application/json; charset=utf-8',
              dataType: 'json',
              success: function (result) {
                 var resultData = (result.d? result.d : result);
                 alert(resultData);
              },
              error : function(){
                 alert('error');
              }
       });
     });
    </script>
    
    Run Code Online (Sandbox Code Playgroud)