jQuery ajax 添加 FriendlyUrls 后调用无法使用 ASP.Net Web 表单
jQuery ajax calls not working with ASP.Net Web Forms when FriendlyUrls are added
以下代码在没有为 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 窗体。
我是不是做错了什么或者遗漏了什么?有没有人在他们的项目中遇到过相同的场景?如果是这样,您能否回答如何解决这个问题?非常感谢您花时间阅读和回复。
因此,最终我通过对我的项目进行以下更改来解决我的问题:
将 FriednlyUrls 添加到项目中。
删除 RegisterRoutes 方法中设置 settings.AutoRedirectMode
属性 的行 App_Start/RouteConfig.cs
(请注意,将其设置为 RedirectMode.Permanent 或 RedirectMode.Off 对我不起作用)
在web.config中添加授权如下system.web部分[=13] =]
<authorization>
<allow users="*" />
</authorization>
修改url in ajax调用设置为使用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>
在这上面花了太多时间之后,我发现我需要在 App_Start/RouteConfig.cs:
中更改它
//settings.AutoRedirectMode = RedirectMode.Permanent;
settings.AutoRedirectMode = RedirectMode.Off;
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);
}
}
以下代码在没有为 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 窗体。
我是不是做错了什么或者遗漏了什么?有没有人在他们的项目中遇到过相同的场景?如果是这样,您能否回答如何解决这个问题?非常感谢您花时间阅读和回复。
因此,最终我通过对我的项目进行以下更改来解决我的问题:
将 FriednlyUrls 添加到项目中。
删除 RegisterRoutes 方法中设置
settings.AutoRedirectMode
属性 的行 App_Start/RouteConfig.cs(请注意,将其设置为 RedirectMode.Permanent 或 RedirectMode.Off 对我不起作用)
在web.config中添加授权如下system.web部分[=13] =]
<authorization> <allow users="*" /> </authorization>
修改url in ajax调用设置为使用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>
在这上面花了太多时间之后,我发现我需要在 App_Start/RouteConfig.cs:
中更改它//settings.AutoRedirectMode = RedirectMode.Permanent;
settings.AutoRedirectMode = RedirectMode.Off;
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);
}
}