【发布时间】:2018-11-21 16:02:56
【问题描述】:
我正在尝试使用来自已安装小部件的 API 请求,但我注意到我的 Json 数据在成功时返回“对象引用未设置为对象实例”异常。
这是 Json:
{
"ApiKey": "d4f37ba05a1941928de3109c8632b1ce",
"Text": "tesst%0A",
"Language": "en",
"Rule": "Preediting_Forum",
"Grammar": "1",
"Spell": "1",
"Style": "1",
"SessionMetadata": "Preediting_Forum;0",
"RequestFormat": "HTML"
}
这里是发布请求的 ajax 代码:
$.ajax({
url: settings.AcceptServerPath + "/Core/AcceptRequest",
dataType: "json",
contentType: "application/json",
type: "POST",
async: true,
cache: true,
data: jsonData,
success: function (data) {
console.log(data);
handleRequestStatus(data, "ACCEPT");
},
complete: function (data) {},
error: function (error) {
displayFailedMessage("ACCEPT", configuration.language.errorRequestFailed);
}
});
可能是什么原因?
编辑 这是 C# 代码:
[HttpPost]
public ActionResult AcceptRequest(CoreApiRequest requestObject)
{
try
{
if (requestObject == null || requestObject.Text.Length == 0)
requestObject = (CoreApiRequest)(new DataContractJsonSerializer(requestObject.GetType())).ReadObject(Request.InputStream);
Dictionary<string, string> parameters = new Dictionary<string, string>();
if (requestObject.ApiKey != null && requestObject.ApiKey.Length > 0)
{
parameters.Add("apiKey", requestObject.ApiKey);
}
else
{
parameters.Add("username", requestObject.User);
parameters.Add("password", requestObject.Password);
}
string text = HttpUtility.UrlDecode(requestObject.Text, System.Text.Encoding.UTF8);
parameters.Add("text", text);
parameters.Add("languageid", requestObject.Language);
parameters.Add("ruleset", requestObject.Rule);
parameters.Add("grammar", requestObject.Grammar);
parameters.Add("spell", requestObject.Spell);
parameters.Add("style", requestObject.Style);
parameters.Add("requestFormat", requestObject.RequestFormat);
if (requestObject.GlobalSessionId != null && requestObject.GlobalSessionId.Length > 0)
{
parameters.Add("globalSessionId", requestObject.GlobalSessionId);
}
if (requestObject.IEDomain != null && requestObject.IEDomain.Length > 0)
parameters.Add("ieDomain", requestObject.IEDomain);
if (requestObject.SessionMetadata != null && requestObject.SessionMetadata.Length > 0)
parameters.Add("sessionMetadata", requestObject.SessionMetadata);
var model = AcceptCoreManager.GenericRequest(parameters);
return Json(model);
}
catch (Exception e)
{
var errorModel = new CoreApiException(e.Message, "Accept Request Controller");
return Json(errorModel);
}
}
AcceptRequest 还有一个 [RestHttpVerbFilter]。不确定在这种情况下使用哪一个...
【问题讨论】:
-
这来自您的 C# 代码。你需要调试它。
-
@SLaks 我用 C# 代码编辑我的帖子。我对它不是很熟悉,那么在这种情况下我应该如何进行调试呢?
-
了解如何使用 Visual Studio 的调试器。此外,删除您的
catch块,以便请求实际上会失败,而不是静默返回无用的 JSON。