Get-request在web api中发送null

时间:2015-11-14 15:32:21

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

我有一个GET-reqeust的行动:

[HttpGet]
public string Answer([FromBody]string value)
{
    CookieHeaderValue cookie = Request.Headers.GetCookies("user").FirstOrDefault();
    game.LogUserAnswer(cookie["user"].Value, value);
    return String.Format("<strong>{0}</strong>: {1} <br>", cookie["user"].Value, game.UserGuess(value));
}

当我试图传递任何数据时,我总是得到空。我用ajax-call调用了这个动作:

$('#btnAnswer').click(function () {
    var value = $('#Answer').val();
    $.ajax({
        type: "GET",
        dataType: "json",
        url: uri + '/' + 'Answer' + '/' + value,
        data: { '': value },
        success: function (data) {
            $('#resultsBox').append('<strong>' + data + '</strong><br>');
        },
        error: function (error) {
            jsonValue = jQuery.parseJSON(error.responseText);
        }
    });
});

在提琴手中,网址是下一个:GET /api/values/Answer/132312?=132312 HTTP/1.1 我尝试发送另一个请求:GET /api/values/Answer/132312 HTTP/1.1 但仍然在我的动作中,值为null。

此外,我已经更改了公共字符串答案(字符串值)(没有FromBody),在这种情况下,应用程序无法找到需要HTTP

你能告诉我,我错过了什么吗?

*更新1 *  var uri =&#39; api / values&#39;;

config.Routes.MapHttpRoute(
    name: "apianswer",
    routeTemplate: "Home/api/values/answer/{id}",
    defaults: new { action = "Answer", id = RouteParameter.Optional }
);

1 个答案:

答案 0 :(得分:1)

获取请求没有正文!您应该将参数作为路线的一部分发送

[HttpGet]
[Route("Home/api/values/answer/{value}"]
public string Answer(string value = null //in case you want to call answer without any value provided)
{...}

$.ajax({
    type: "GET",
    url: uri + '/' + 'Answer' + '/' + value,
    ...
});

或作为查询字符串

[HttpGet]
public string Answer(string value)
{...}

$.ajax({
    type: "GET",
    url: uri + '/' + 'Answer',
    data: {value: value}
    ...
});