jquery ajax调用带有重定向模式的Web方法?

时间:2014-05-16 06:23:43

标签: jquery asp.net ajax

我有一个jquery对服务器端webmethod进行ajax调用

$("#Result").click(function () {
            $.ajax({
                type: "POST",
                url: "TestPage.aspx/TestString",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    // Replace the div's content with the page method's return.
                    $("#Result").text(msg.d);
                }
            });
        });

如果我关闭路由

,这样可以正常工作
settings.AutoRedirectMode = RedirectMode.Off;

我想打开它,但是当我这样做时,ajax调用失败并显示“401(未经授权)。”有没有办法在仍然有路由的情况下进行ajax调用?

settings.AutoRedirectMode = RedirectMode.Permanent;

编辑:有人投票认为这应该作为副本关闭,答案结束here,但答案没有用。它提供的第一个解决方案是将RedirectMode设置为Off,这正是我不想做的,而另一个关于Friendly Urls的不起作用。

1 个答案:

答案 0 :(得分:6)

我可以看到您的问题 - 禁用AutoRedirectMode意味着.aspx网址可以自由访问(不好)。但是您希望使用ASPX URL访问WebMethod。

解决此问题的方法是禁用自动重定向模式,如上所示

settings.AutoRedirectMode = RedirectMode.Off;

并在page_load中处理包含.aspx页面的请求(在点击WebMethod时不会调用)。

protected void Page_Load(object sender, EventArgs e)
{
   if(Request.RawUrl.Contains(".aspx"))
   {
      Response.StatusCode = 404;
      Server.Transfer("page-not-found.aspx");
   }
}

如果您想按照正常情况重定向而不是发送404 - 剥离.ASPX并使用以下方式发送301:

Response.RedirectPermanent(Request.RawUrl.Replace(".aspx",""));

如果您使用MasterPage或从页面继承,您只需要编写一次代码。