【问题标题】:Internal Server Error when sending JSON object to .NET webservice将 JSON 对象发送到 .NET Web 服务时发生内部服务器错误
【发布时间】:2014-10-03 09:35:37
【问题描述】:

我在将复杂的 JSON 对象提交到 .NET Web 服务时遇到问题。

Ajax JavaScript 代码:

$.ajax({
    type: "POST",
    url: WEBSERVICE_ADMINISTRATIO_URL + "RecieveData",

    data: JSON.stringify({data: _data}), // _data is the Javascipt object {}
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        alert(data);
    },
    failure: function (errMsg) {
        alert(errMsg);
    },
    error: function (jqXHR, textStatus, errorThrow) {
        alert(textStatus);
    }
});

.NET 网络服务

 [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string RecieveData(string data)
    {

        return "";
    }

我在尝试从客户端向 Web 服务提交数据时收到 Internal Server Error 500

我还有其他只返回数据的 web 服务功能,它们工作正常。我在 web.config 中同时授予了 GET 和 POST 权限。

这是详细的错误:

"{"Message":"No parameterless constructor defined for type of 
 \u0027System.String\u0027.","StackTrace":"   at 
system.Web.Script.Serialization.ObjectConverter.ConvertDictionaryToObject(IDictionary`2 dictionary, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object\u0026 convertedObject)\r\n   at 
System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object\u0026 convertedObject)\r\n   at 
System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object\u0026 convertedObject)\r\n   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(Object o, Type type, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary`2 rawParams)\r\n   at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters)\r\n   at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.MissingMethodException"}"

谢谢。

【问题讨论】:

  • ...您尝试过什么调试?您是否打开了一些详细的错误消息?也许添加了一个断点并进入该方法? ...“内部服务器错误”只是默认的 500 响应代码。这意味着某事出了问题——你必须告诉我们那是什么来帮助我们。
  • 我在 Chrome 的控制台中收到错误,代码返回到 $.ajax 调用的“错误”函数。发生在我调用 web 服务的 $.ajax 调用行(我在上面显示的确切 Javascipt 代码)。网络服务代码尽可能简单。因此,我认为这是数据如何发送到 Web 服务的问题。
  • 在该 javascript 错误函数中放置一个断点并检查其余变量。如果他们只给你通用的500 - Internal Server Error 响应,那么你需要在.NET 端启用一些更详细的错误消息。也许强行转向<customErrors mode="Off" />,这样你就会得到一个丑陋的堆栈跟踪,告诉你更多信息。鉴于Internal Server Error 可能意味着任何事情,您的问题无法回答:/
  • 尝试发送您的data,而不用stringifying它...
  • @L.B 在没有 stringify 的情况下发送数据会给出相同的错误 (500)

标签: c# javascript jquery .net web-services


【解决方案1】:

感谢大家的支持。我可以通过将参数数据类型从字符串更改为对象来解决这个问题。

 public string RecieveData(Object data)
{

    return "";
}

【讨论】:

    猜你喜欢
    • 2014-11-25
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    相关资源
    最近更新 更多