Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理jqueryajax方法引发的错误_C#_Asp.net_Web Services_Jquery_Burp - Fatal编程技术网

C# 处理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

我有一个页面,其中我使用jqueryajax方法调用一个简单的Webservice,它将从数据库中获取一些数据,并将其绑定到页面中的一些控件。ajax方法在select的onchange事件上被调用(这里HTTP请求是POST)。以下是jQueryAjax方法

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响应,而不是返回它

  • 如果对webservice的真正调用可以在正常操作下生成异常(这通常是不好的!),则需要验证请求中接收到的数据,以查看它是否是webservice方法期望接收的数据(是否接收到数据?是否是ajax请求发送的正确结构?等等)


  • 注意:如果请求确实包含有效数据,那么就没有简单的方法来检测这是来自真正的源(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),而不是返回错误