从javascript调用webmethod时发生ASP.NET 500内部服务器错误

从javascript调用webmethod时发生ASP.NET 500内部服务器错误,javascript,c#,asp.net,ajax,Javascript,C#,Asp.net,Ajax,我试图使用AJAX调用webmethod函数性,但无法得到适当的结果。我在谷歌上搜索了我的问题,找到了很多解决方案,但这些都不适合我。请告诉我我做错了什么。我们将不胜感激 干杯 代码片段 function checkUserNameExists() { //initialization var pagePath = window.location.pathname + "/getUsername"; var value = document.getElementById('control_u

我试图使用AJAX调用
webmethod
函数性,但无法得到适当的结果。我在谷歌上搜索了我的问题,找到了很多解决方案,但这些都不适合我。请告诉我我做错了什么。我们将不胜感激

干杯

代码片段

 function checkUserNameExists() {

//initialization
var pagePath = window.location.pathname + "/getUsername";
var value = document.getElementById('control_userName').value;
var dataString = "{ 'value':'" + value + "' }";
$.ajax({
    type: "GET",
    url: pagePath,
    data: dataString,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    error:
            function (XMLHttpRequest, textStatus, errorThrown) {

            },
    success:
            function (result) {
                var flag = true;
                if (result != null) {
                    flag = result.d;
                    if (flag == "True") {
                        alert('okay fine you are good');
                    }
                    else {
                        alert('try again');
                    }
                }
            }
});
 }
隐藏代码文件中的方法

    [WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public string getUsername(string value)
    {
        return "True";
    }
例外情况

 ExceptionType: "System.InvalidOperationException"
  Message: "An attempt was made to call the method 'getUsername' using a        POST request, which is not allowed."

您可能需要向方法声明中添加static,如下所示

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string getUsername(string value)
{
   return "True";
}
如果不是这种情况,您可以F12浏览器->网络,然后单击错误消息简要查看它


关于报告的问题,get请求的问题,请尝试将其设置为post

首先,如果webmethod在page类中,而不是在Webservice类中,那么它应该是静态的

其次,传输的数据实际上不是字符串,而是对象,因此将其更改为:

var dataString = { 'value':  value  };
第三件事,“type”是对于较旧版本的jquery,您应该将ajax调用更改为:

method: "GET",
url: pagePath,
data: dataString,
contentType: "application/json; charset=utf-8",
dataType: "json",...
或者通过删除

UseHttpGet = true
答案如下:


问题在于我使用的注释是导致错误的
[ScriptMethod(UseHttpGet=true)]
。只需将值从true更改为false即可。

这不是此问题的具体问题,但您可以检查一些内容,以便更好地了解问题的原因

  • 检查的“概述”部分中的状态代码和请求类型 请求头
  • 如果存在任何json错误,请检查响应标题
  • 检查响应以获取消息、堆栈跟踪和异常 类型
  • 检查标题中的请求有效负载部分以了解参数 通过了

查看更多详细信息

在我的例子中,问题是“数据”字段(GET和POST两种情况)。作为测试,从AJAX调用中删除“数据”,同时删除web方法参数,如果它起作用,那么问题在于“数据”字段的格式:

一些例子:

data: JSON.stringify({ "parameter": variable })     WORKS
data: JSON.stringify({ parameter: variable })       WORKS
data: '{"parameter": "' + variable + '"}'           WORKS
data: '{parameter: ' + variable + '}'               don't works 
data: JSON.stringify({ 'parameter': 'value' })      WORKS
data: '{"parameter":"value"}'                       WORKS
data: "{'parameter':'value'}"                       WORKS
data: '{parameter:value}'                           don't works
data: {parameter:value}                             don't works
data: {"parameter":"value"}                         don't works
data: {'parameter':'value'}                         don't works

我的控制台显示以下错误:GET 500(内部服务器错误)yes,在F12控制台打开期间单击此错误,它将详细显示错误。此外,您可以尝试从客户端和服务器端函数中删除参数,以检查发送参数是否不是错误我已编辑问题并发布异常。感谢您删除[ScriptMethod(UseHttpGet=true)],并将请求设置为post请求,然后尝试itokay。我已删除该请求并将其设置为post。但是你能告诉我为什么我们应该发布请求吗?如果我使用GET而不是POST呢?是的,这个方法是在page类中实现的。我已将其签名更改为静态,但仍然得到相同的错误。-->GET 500(内部服务器错误)您是否执行了其他操作?var dataString={'value':value};而不是var dataString=“{'value':'”+value+“}”;?你能在这里发布错误吗?是的,我这与你上面提到的相同,但仍然是相同的结果。好的,我已经更新了上面的问题,并分享了错误消息。在较旧版本的jquery中使用了“type”,因此调用忽略了它,而是发送了一个帖子。你必须把它改成“方法”
data: JSON.stringify({ "parameter": variable })     WORKS
data: JSON.stringify({ parameter: variable })       WORKS
data: '{"parameter": "' + variable + '"}'           WORKS
data: '{parameter: ' + variable + '}'               don't works 
data: JSON.stringify({ 'parameter': 'value' })      WORKS
data: '{"parameter":"value"}'                       WORKS
data: "{'parameter':'value'}"                       WORKS
data: '{parameter:value}'                           don't works
data: {parameter:value}                             don't works
data: {"parameter":"value"}                         don't works
data: {'parameter':'value'}                         don't works