В чем проблема с маршрутом asp.net

0

Это из asp.net 5/mvc 6. У меня есть два метода контроллера, каждый из которых принимает один параметр и каждый возвращает строку. Один метод принимает строковый параметр, а другой принимает простой объект. Метод, который принимает строковый параметр, не работает (значение для входящего параметра всегда равно null). Вызов, который проходит в простом объекте, работает. Я вызываю эти методы изнутри углового контроллера, используя службу $ http. Я должен делать что-то неправильно, это очень просто, но я этого не вижу.

Вот код для класса контроллера:

[Route("api/[controller]")]
public class ValuesController : Controller
{
    [HttpPost("PostWithStringParam")]
    public string PostWithStringParam([FromBody] string val)
    {
        return val ?? "<null>";
    }

    [HttpPost("PostWithInputparam")]
    public string PostWithInputParam([FromBody] TestInputClass val)
    {
        string ret = "<null>";

        if (val != null)
        {
            ret = $"First Name: {val.Name}, City: {val.City}";
        }

        return ret;
    }
}

Вот соответствующий код от углового контроллера. Обратите внимание, что функция "go" подключена к ng-клику с помощью кнопки.

    vm.inputObject = {
        name: "George",
        city: "Chicago"
    }

    vm.inputString = "some data";

    var callApi = function(url, data) {

        $http({
            method: "POST",
            url: url,
            data: data
        }).then(
            function (result) {
                alert(result.data);
            },
            function (error) {
                alert(error.status);
            }
        );
    }

    var callStringApi = function() {

        var url = "api/values/PostWithStringParam";

        callApi(url, vm.inputString);
    }

    var callObjectApi = function () {

        var url = "api/values/PostWithInputParam";

        callApi(url, vm.inputObject);
    }

    vm.go = function() {

        callStringApi();
        callObjectApi();
    }

Может кто-то, пожалуйста, скажите мне, почему метод, который принимает входную строку, не работает?

Благодарю!

  • 0
    Почему вы используете [FromBody] для простого типа?
Теги:
asp.net-mvc

1 ответ

1
Лучший ответ

Вам нужно strinfigy данных и указать contentType как application/json при отправке данных. Затем связующее устройство по умолчанию сможет сопоставить опубликованные данные.

var callApi = function(url, data) {

    $http({
        method: "POST",
        url: url,
        data: JSON.stringify(data),
        contentType:"application/json"
    }).then(
        function (result) {
            alert(result.data);
        },
        function (error) {
            alert(error.status);
        }
    );
}
  • 1
    Это сработало! Благодарю.
  • 0
    Здорово. Вот обширное сообщение, чтобы охватить все случаи использования при публикации в веб-API

Ещё вопросы

Сообщество Overcoder
Наверх
Меню