如果没有为ASP.Net Web Forms项目打开FriendlyUrl,则以下代码可以正常工作:
<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包!
我一直在寻找解决方案,而我能找到的最接近可读的答案是:
将jQuery for AJAX与ASP.NET Webforms结合使用
http://encosia.com/using-jquery-to-direct-call-aspnet-ajax-page-methods/
请注意,给定答案中的所有相关帖子均不使用FriendlyUrls。我还看到了一些答案,表明jquery ajax调用可以与MVC,WebAPI一起正常工作,但是我的项目仅限于使用ASP.Net Web窗体。
我在这里做错了什么还是错过了什么?有没有人在他们的项目中遇到过相同的情况?如果是这样,请您回答如何解决?多谢您抽出宝贵的时间阅读和回复。
因此,最终我对项目进行了以下更改,从而解决了我的问题:
将FriednlyUrls添加到项目中。
删除RegisterRoutes方法中设置App_Start / RouteConfig.cs中的settings.AutoRedirectMode
属性的行
(请注意,将其设置为RedirectMode.Permanent或RedirectMode.Off不适用于我)
在system.web部分下的web.config中添加授权
<authorization>
<allow users="*" />
</authorization>
修改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');
}
});
});
</script>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句