从 WebAPI 返回一个 json 对象
本文关键字:一个 json 对象 WebAPI 返回 | 更新日期: 2023-09-27 18:32:50
我似乎无法让客户端识别我试图从我的 API 返回的 json。
服务器代码:
public HttpResponseMessage Post(Client value)
{
LoginResult result = new LoginResult();
var response = this.Request.CreateResponse(HttpStatusCode.OK, result);
return response;
}
客户端代码:
$.ajax({
url: "http://localhost:/api/Login",
data: JSON.stringify(client),
type: "POST",
contentType: "application/json; charset=utf-8",
success: function(data){
if(data.Message == "error")
{
alert("Error when logging in.");
return;
}
alert("Login worked. Your token is " + data.Token + ". And you'll log into " + data.GameServerAddress + " on port " + data.GameServerPort;
$("#loginUsername").val("");
$("#loginPassword").val("");
},
error: function(jqXhr, exception){
alert("There was an error logging on: " + jqXhr.status)
}
});
当我逐步执行它时,它会进入 api 调用,如果我只返回一个字符串,那就没问题了。但是当我尝试在客户端上返回对象时,我在控制台中收到以下错误:
Uncaught ReferenceError: data is not defined
在我的WebApiConfig中.cs我有:
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
我也试过:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json"));
但他们都没有奏效。我错过了什么?每个关于这个的帖子都说使用HttpResponseMessage,这应该有效。
在我看来,
你的代码问题是
LoginResult result = new LoginResult();
您尚未分配其任何属性。基本上结果中没有任何内容。
var response = this.Request.CreateResponse(HttpStatusCode.OK, result);
尝试分配一些属性。
为了强制执行JSON响应,您可以在global.asax中添加以下内容
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());