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

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

 $(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'); } }); });  

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

 [System.Web.Services.WebMethod] public static string GetData() { return "Hello"; } 

当我在浏览器中加载页面时,我可以看到响应为{ "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/

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

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

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

 //settings.AutoRedirectMode = RedirectMode.Permanent; settings.AutoRedirectMode = RedirectMode.Off; 

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

  1. 将FriednlyUrls添加到项目中。

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

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

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

        
  4. 修改ajax调用设置中的url以使用Microsoft.AspNet.FriendlyUrls.Resolve函数以获取正确的url,如下所示:

      
 public static class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { var settings = new FriendlyUrlSettings(); //Esta wea se deshabilita para que funcione ajax autocomplete. //settings.AutoRedirectMode = RedirectMode.Permanent; settings.AutoRedirectMode = RedirectMode.Off; routes.EnableFriendlyUrls(settings); } }