C# 处理jqueryajax方法引发的错误
我有一个页面,其中我使用jqueryajax方法调用一个简单的Webservice,它将从数据库中获取一些数据,并将其绑定到页面中的一些控件。ajax方法在select的onchange事件上被调用(这里HTTP请求是POST)。以下是jQueryAjax方法C# 处理jqueryajax方法引发的错误,c#,asp.net,web-services,jquery,burp,C#,Asp.net,Web Services,Jquery,Burp,我有一个页面,其中我使用jqueryajax方法调用一个简单的Webservice,它将从数据库中获取一些数据,并将其绑定到页面中的一些控件。ajax方法在select的onchange事件上被调用(这里HTTP请求是POST)。以下是jQueryAjax方法 function CallAjax(url, jsonData, SucessFunction, FailurFunction) { $.ajax({ type: "POST", url: url, data: j
function CallAjax(url, jsonData, SucessFunction, FailurFunction) {
$.ajax({
type: "POST",
url: url,
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: SucessFunction,
error: function(){
alert('error occured');
}
});
}
上述方法的URL是somepage.aspx/GetDataFromDatabase,其中GetDataFromDatabase是webservice方法。我们的测试人员正在使用burp套件测试页面。当他们直接绑定到浏览器中的url(www.example.com/somepage.aspx/GetDataFromDatabase)时,burp suite中显示的HTTP方法为GET,并引发错误,用户被重定向到相应的页面。但是,当他们直接访问上述URL并在burp suite中拦截请求并将GET request更改为POST request时,浏览器中会直接显示以下错误消息:
{“Message”:“处理请求时出错。”,“StackTrace”:“ExceptionType”:“}
上述ajax函数中的“错误”没有被执行,警报框也没有显示,我们能够处理错误。如何处理此类错误并将用户重定向到自定义页面 服务器的响应似乎是一个有效的JSon响应,尽管它包含(对您而言)读作错误的内容。因此,
$.ajax(…)
调用将响应处理为成功,而不是错误
您可以返回有效的JSon响应,并在该响应中指示是否存在错误,以及任何其他信息,如用户友好的错误消息、重定向URL等
错误:
调用的$.ajax(…)
处理程序应用于实际的服务器响应错误(即未处理的500个错误、超时等)
例如,您成功的JSon响应可能类似于:
{
success: true,
errorMessage: null,
errorRedirectUrl: null,
data: { .... your successful data response .... }
}
您失败的JSon响应(例如,由于验证问题,而不是服务器故障)如下所示:
{
success: false,
errorMessage: 'There was an error processing the request.',
errorRedirectUrl: 'http://....someurl...',
data: null
}
然后在$.ajax(..)
调用的success:
选项中检查response.success==true
,并进行适当的处理
通过使用单一、一致的结构,success:
选项处理所有完成的ajax请求,然后确定是否存在已处理的错误以及如何处理,例如向用户显示警报、将它们重定向到URL等
相反,error:
选项只处理那些没有返回您可以使用的响应的ajax请求
更新:
在服务器上,您已经在处理接收GET
http请求和POST
http请求之间的差异。因此,我认为您的问题是您还需要检测POST
请求是否包含webservice方法所需格式的有效数据
因此,您的web服务需要确定http请求中发布的数据是否为它期望接收的格式,如果不是,则返回http重定向响应(302),而不是返回错误
您可以通过两种方式完成此操作:
尝试。。。捕捉…
块。您的webservice方法似乎已经在抛出异常并返回它,因此请捕获它,然后设置并返回302响应,而不是返回它注意:如果请求确实包含有效数据,那么就没有简单的方法来检测这是来自真正的源(ajax调用)还是通过其他方式伪造的请求。有一些解决方案,但它们涉及其中,可能需要多次调用以进行身份验证等。来自服务器的响应似乎是一个有效的JSon响应,尽管它包含(对您而言)读取为错误的内容。因此,
$.ajax(…)
调用将响应处理为成功,而不是错误
您可以返回有效的JSon响应,并在该响应中指示是否存在错误,以及任何其他信息,如用户友好的错误消息、重定向URL等
错误:
调用的$.ajax(…)
处理程序应用于实际的服务器响应错误(即未处理的500个错误、超时等)
例如,您成功的JSon响应可能类似于:
{
success: true,
errorMessage: null,
errorRedirectUrl: null,
data: { .... your successful data response .... }
}
您失败的JSon响应(例如,由于验证问题,而不是服务器故障)如下所示:
{
success: false,
errorMessage: 'There was an error processing the request.',
errorRedirectUrl: 'http://....someurl...',
data: null
}
然后在$.ajax(..)
调用的success:
选项中检查response.success==true
,并进行适当的处理
通过使用单一、一致的结构,success:
选项处理所有完成的ajax请求,然后确定是否存在已处理的错误以及如何处理,例如向用户显示警报、将它们重定向到URL等
相反,error:
选项只处理那些没有返回您可以使用的响应的ajax请求
更新:
在服务器上,您已经在处理接收GET
http请求和POST
http请求之间的差异。因此,我认为您的问题是您还需要检测POST
请求是否包含webservice方法所需格式的有效数据
因此,您的web服务需要确定http请求中发布的数据是否为它期望接收的格式,如果不是,则返回http重定向响应(302),而不是返回错误