我似乎无法让客户认出json,我正试图从我的api返回。
服务器代码:
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,这应该可行。
答案 0 :(得分:0)
在我看来,你的代码问题是
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());