本周我遇到的一种情况:我们有一个jQuery Ajax调用,可以回到服务器来获取数据
$.ajax(
{
type: "POST",
contentType: "application/json; charset=utf-8",
url: fullMethodPath,
data: data,
dataType: "json",
success: function(response) {
successCallback(response);
},
error: errorCallback,
complete: completeCallback
});
fullMethodPath
是指向页面上静态方法的链接(假设为/MyPage.aspx/MyMethod
)。
public partial class MyPage : Page
{
// snip
[WebMethod]
public static AjaxData MyMethod(string param1, int param2)
{
// return some data here
}
}
这样有效,没问题。
一位同事试图用类型为“GET”的那个替换这个电话。它坏了,我不得不解决它。最后,我回到了POST,因为我们需要快速修复,但它一直在困扰我,因为在这种情况下语义上GET更“正确”。
据我了解,jQuery将数据中的对象转换为查询字符串:/MyPage.aspx/MyMethod?param1=value1¶m2=value2
但我可以获得的只是页面内容MyPage.aspx
。
这只是Page方法的“功能”,还是有办法让GET请求有效?
答案 0 :(得分:24)
出于安全原因,ASP.Net AJAX页面方法仅支持POST请求。
答案 1 :(得分:0)
的确,出于安全原因,ASP.NET
AJAX
页方法仅支持POST
请求,但是您可以通过以下两个属性来修饰WebMethod
来覆盖此行为:
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
我认为接受的答案是不完整的,没有指出解决方法。