将 JSON 对象发送到 .NET Web 服务时发生内部服务器错误
Posted
技术标签:
【中文标题】将 JSON 对象发送到 .NET Web 服务时发生内部服务器错误【英文标题】:Internal Server Error when sending JSON object to .NET webservice 【发布时间】: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)
【参考方案1】:
感谢大家的支持。我可以通过将参数数据类型从字符串更改为对象来解决这个问题。
public string RecieveData(Object data)
return "";
【讨论】:
以上是关于将 JSON 对象发送到 .NET Web 服务时发生内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章
zz 试图将 JSON 发送到.NET web 服务使用 HttpURLConnection FileNotFoundException
asp.net core 3 Web API !发送 json 到 POST 动作
使用 alamofire 将带有 JSON 对象和查询参数的 POST 请求发送到 REST Web 服务
JSON 写入错误中的类型无效,尝试通过 JSON 将自定义类发送到 .NET Web 服务