繁体   English   中英

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

[英]ASP.NET 500 Internal Server Error while calling webmethod from javascript

我正在尝试使用 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."

首先,webmethod是在页面类中,而不是在Webservice类中,那么它应该是静态的。

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

var dataString = { 'value':  value  };

第三件事,“类型”是旧版本的jquery,您应该将ajax调用更改为:

method: "GET",
url: pagePath,
data: dataString,
contentType: "application/json; charset=utf-8",
dataType: "json",...

或者通过删除,更改服务器端的功能以获得后续呼叫

UseHttpGet = true

您可能需要在方法声明中添加静态,如下所示

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string getUsername(string value)
{
   return "True";
}

如果不是这种情况,您可以使用F12浏览器 - >网络,然后单击错误消息进行简要查看。

关于报告的问题,get请求的问题,尽量让它发布

答案就在这里: 链接

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

这不是特定于这个问题,但你可以检查一些事情,以更好地了解导致问题的原因。

  • 在“ 请求标头”的“常规”部分中检查请求的状态代码和类型。
  • 如果有任何json错误,请检查响应标头
  • 检查响应以获取消息,堆栈跟踪和异常类型。
  • 检查Headers中Request Payload部分是否已传递参数。

查看此帖子了解更多详情。

在我的情况下,问题是“数据”字段(两种情况,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

在我的情况下,错误是由于在 jquery ajax 调用中定义了不正确的参数名称。

请检查参数名称,并确保 webmethod 函数在 .cs 页面中定义为静态。

A mi me sucedió algo muy parecido:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TestWeb.Vistas.WebForm1" %>

En mi .aspx en la primea linea tal como se muestra como lo before, tenia una diferencia en Inherits="TestWeb.Vistas.WebForm1" ya que movi mi .aspx de lugar dentro de la carbona vistas, lo que ocasiono que mi namespace dentro德MI aspx.cs东德本身encontraba英里WEBMETHOD没有correspondia CON LA鲁塔especifica POR LO的CuAl没有podíaencontrar EL代码隐藏,ES decir对MI卡索独奏FUE necesario validar阙拉鲁塔去继承correspondiera CON EL命名空间去英里代码隐藏,ESPERO ESTO LES艾尤德。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM