小编典典

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

ajax

在没有为ASP.Net Web Forms项目打开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包!

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

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

我在这里做错了什么还是错过了什么?有没有人在他们的项目中遇到过相同的情况?如果是这样,请您回答如何解决?多谢您抽出宝贵的时间阅读和回复。


阅读 336

收藏
2020-07-26

共1个答案

小编典典

因此,最终我对项目进行了以下更改,从而解决了我的问题:

  1. 将FriednlyUrls添加到项目中。

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

(请注意,将其设置为RedirectMode.Permanent或RedirectMode.Off不适用于我)

  1. system.web 部分下的web.config中添加 授权 __

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

  2. 修改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’);
    }
    });
    });

2020-07-26