以下代码在没有为 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 包添加友好 URL Microsoft.AspNet.FriendlyUrls ,相同的代码将无法工作。由于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 表单。
我在这里做错了什么或者遗漏了什么吗?有人在他们的项目中遇到过同样的情况吗?如果是这样,您能回答一下这个问题如何解决吗?非常感谢您花时间阅读和回复。
最佳答案
在这上面花了太多时间后,我发现我需要在 App_Start/RouteConfig.cs 中更改它:
//settings.AutoRedirectMode = RedirectMode.Permanent;
settings.AutoRedirectMode = RedirectMode.Off;
关于添加FriendlyUrls 后,jQuery ajax 调用无法与 ASP.Net Web 表单一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32663858/