从WebAPI

时间:2016-02-01 05:14:47

标签: c# asp.net asp.net-web-api

我似乎无法让客户认出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,这应该可行。

1 个答案:

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