从 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,这应该有效。

从 WebAPI 返回一个 json 对象

在我看来,

你的代码问题是

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());