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

Posted

技术标签:

【中文标题】添加 FriendlyUrls 时,jQuery ajax 调用不适用于 ASP.Net Web 窗体【英文标题】:jQuery ajax calls not working with ASP.Net Web Forms when FriendlyUrls are added 【发布时间】:2015-12-16 07:14:44 【问题描述】:

以下代码在没有为 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>

这里是页面方法(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 包!

我一直在努力寻找解决方案,我能找到的最接近可读的答案是:

Using jQuery for AJAX with ASP.NET Webforms

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

请注意,给定答案中的所有相关帖子都不使用 FriendlyUrls。我还看到一些答案表明 jquery ajax 调用可以与 MVC、WebAPI 一起正常工作,但我的项目仅限于使用 ASP.Net Web 窗体。

我在这里做错了什么或遗漏了什么吗?有没有人在他们的项目中遇到过相同的情况?如果是这样,您能回答如何解决这个问题吗?非常感谢您花时间阅读和回复。

【问题讨论】:

看看这个答案是否有帮助:***.com/questions/23033614/…(向下滚动)。 @wazz 感谢您回答我的问题。你提到的帖子通过一些修改帮助我得到了我的问题的答案。有关详细信息,请参阅我的答案。谢谢! 【参考方案1】:
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);
    

【讨论】:

亲,抛出自动补全的错误401是通过更改参数设置解决的。AutoRedirectMode = RedirectMode.Off;在 Visual Studio 2017 RouteConfig 中。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

    将 FriednlyUrls 添加到项目中。

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

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

    system.web 部分下的 web.config 中添加 authorization,如下所示

    <authorization>
        <allow users="*" />
    </authorization>
    

    修改 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>
    

【讨论】:

以上是关于添加 FriendlyUrls 时,jQuery ajax 调用不适用于 ASP.Net Web 窗体的主要内容,如果未能解决你的问题,请参考以下文章

命名空间“Microsoft.AspNet”中不存在类型或命名空间名称“FriendlyUrls”

Webform中启用Microsoft.AspNet.FriendlyUrls引起post请求失效

是否可以使用 ASP.NET FriendlyUrls 摆脱“索引”?

ASP.NET 关闭 FriendlyURLs mobile.master 页面

带有 FriendlyUrls 和 debug="false" 的 ASP.NET WebForms 项目在生产中引发 404

无法加载类型 ASP.ViewSwitcher