如果没有为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 Forms。
我做错了什么或错过了什么?有没有人遇到过他们项目的相同场景?如果是这样,你能否回答一下如何解决这个问题?非常感谢您花时间阅读和回复。
答案 0 :(得分:8)
在花了太多时间之后,我发现我需要在App_Start / RouteConfig.cs中更改它:
//settings.AutoRedirectMode = RedirectMode.Permanent;
settings.AutoRedirectMode = RedirectMode.Off;
答案 1 :(得分:6)
所以,最终我通过对我的项目进行以下更改来解决我的问题:
将FriednlyUrls添加到项目中。
删除在 App_Start / RouteConfig.cs
settings.AutoRedirectMode属性的 RegisterRoutes 方法中的行>(请注意,将其设置为RedirectMode.Permanent或RedirectMode.Off对我不起作用)
在web.config中添加授权,如下所示 system.web 部分
<authorization>
<allow users="*" />
</authorization>
修改ajax调用设置中的网址以使用 Microsoft.AspNet.FriendlyUrls.Resolve 功能,以获取正确的网址,如下所示:
<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>
答案 2 :(得分:-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);
}
}