从 javascript 调用 webmethod 时出现 ASP.NET 500 内部服务器错误
Posted
技术标签:
【中文标题】从 javascript 调用 webmethod 时出现 ASP.NET 500 内部服务器错误【英文标题】:ASP.NET 500 Internal Server Error while calling webmethod from javascript 【发布时间】:2015-07-12 18:26:38 【问题描述】:我正在尝试使用 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');
);
Behind Code 文件中的方法
[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."
【问题讨论】:
【参考方案1】:首先,如果 webmethod 在页面类中,而不是在 Webservice 类中,那么它应该是静态的。
第二,传输的数据并不是真正的字符串,而是一个对象,所以改成:
var dataString = 'value': value ;
第三件事,“类型”适用于旧版本的 jquery,您应该将 ajax 调用更改为:
method: "GET",
url: pagePath,
data: dataString,
contentType: "application/json; charset=utf-8",
dataType: "json",...
或更改服务器端的函数以获取帖子调用,方法是删除
UseHttpGet = true
【讨论】:
是的,该方法在页面类中实现。我已将其签名更改为静态,但仍然出现相同的错误。 -->GET localhost:7492/route/frame_signup/signup.aspx/getUsername?abc500(内部服务器错误) 你做了其他事情吗? var dataString = '值':值;而不是 var dataString = " 'value':'" + value + "' ";?你可以在这里发布错误吗? 是的,我和你上面提到的一样,但结果还是一样。 好的,我已经更新了上面的问题并分享了错误信息。 "type" 在旧版本的 jquery 中使用,所以调用忽略了它并发送了一个帖子。您必须将其更改为“方法”【参考方案2】:可能您需要将静态添加到您的方法声明中,如下所示
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string getUsername(string value)
return "True";
如果不是这种情况,您可以 F12 浏览器->网络,然后单击错误消息以简要查看。
关于报告的问题,获取请求的问题,尝试发布
【讨论】:
我的控制台显示以下错误:GET localhost:7492/route/frame_signup/signup.aspx/getUsername?abc 500 (Internal Server Error) 是的,通过在 F12 控制台打开期间单击此错误,它将详细显示错误..您也可以尝试从客户端和服务器端函数中删除参数以检查是否发送参数不是错误 我已经编辑了我的问题并发布了异常。谢谢 删除 [ScriptMethod(UseHttpGet = true)] 并将请求设为 post 请求并尝试 好的,我已将其删除并发布。但是你能告诉我为什么我们应该发布请求,如果我使用 GET 而不是 POST 怎么办?【参考方案3】:答案在这里:link
问题在于我使用 [ScriptMethod(UseHttpGet = true)]
的注释导致错误。只需将值从 true 更改为 false。
【讨论】:
【参考方案4】:这不是针对此问题的,但您可以检查一些事项以更好地了解导致问题的原因。
在“常规”部分检查状态代码和请求类型 请求标头。 如果有任何 json 错误,请检查 响应标头。 检查 Response 以获取消息、堆栈跟踪和异常 输入。 检查 Headers 中的 Request Payload 部分的参数 通过了。查看this post 了解更多详情。
【讨论】:
【参考方案5】:在我的情况下,问题是“数据”字段(两种情况,GET 和 POST)。作为测试,从 AJAX 调用中删除“数据”并删除 web 方法参数,如果有效,那么问题是“数据”字段的格式:
$.ajax(
type: "GET",
url: pagePath,
contentType: "application/json; charset=utf-8",
dataType: "json",
...
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public string getUsername()
return "True";
一些例子:
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
【讨论】:
【参考方案6】:在我的情况下,错误是由于在 jquery ajax 调用中定义了不正确的参数名称。
请检查参数名称,并确保 webmethod 函数在 .cs 页面中定义为静态。
【讨论】:
以上是关于从 javascript 调用 webmethod 时出现 ASP.NET 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 AJAX 从 VB 文件请求 webmethod 信息时出现问题
如何将id从webmethod中的函数返回到javascript代码
如何从 vb.net 中的 aspx.vb 页面调用 webmethod