Как передать объект json в качестве параметра из внешнего интерфейса AngularJS в метод WebAPI и получить значения - PullRequest
0 голосов
/ 05 февраля 2019

Мне нужно передать данные, введенные в интерфейс AngularJS, в webAPI и получить другой набор данных для заполнения в сетке.Я пытаюсь передать данные в виде объекта JSON в метод webAPI.В методе WebAPI параметр, который я передаю для объекта JSON в качестве объекта Class.

Я не могу войти в конкретный метод webAPI, когда использую [HTTPPost], но я могу войти вметод webAPI, когда я использую [HTTPGet].Но в этом случае объект класса, который является параметром в методе webAPI, показывает значение NULL.

Можете ли вы посоветовать, как решить проблему.

WebAPI

namespace webAPITestProject.Controllers
{
    [Route("NewRoute")] 
    public class ValuesController : ApiController
    {
        retrieveEmployeeData empData = new retrieveEmployeeData();
        retrieveProductDetails prodDetls = new retrieveProductDetails();    

        [Route("http://localhost:212122/api/Values/GetEmployeeData?EmployerDetls=")] 
        [HttpPost]
        public DataTable getEmployeeData(HttpRequestMessage request,[FromBody] Employer empDetails)
        {
            DataTable dataTable = new DataTable { TableName = "MyTableName" };
            dataTable = empData.getEmployeeData(empDetails);
            return dataTable;
        }
    }
}

AngularJS-Controller

angular.module('Test.Employer')
    .controller('EmployerController', ['$scope','headerValue', '$http',
        function ($scope, headerValue, $http) { 
            var ipEmployerDetls = {                   
                EmployerName: "cherokee",
                Company: "ABC"                   
            };

            $http({ 
                url: "http://localhost:212122/api/Values/GetEmployeeData?EmployerDetls=",
                dataType: 'json', 
                method: 'POST', 
                data: JSON.stringify(ipEmployerDetls), 
                headers: { 
                    "Content-Type": "application/json" 
                } 
            }).success(function (response) { 
                $scope.object = response.data;
            }) 
                .error(function (error) { 
                    alert(error.Message); 
                });
})();

Класс работодателя

public class Employer
{
    string _companyCode = "";
    string _employerName = "";
    public string Company
    {
        get
        {
            return _companyCode;
        }
        set
        {
            _companyCode = value;
        }
    }

    public string EmployerName
    {
        get
        {
            return _employerName;
        }
        set
        {
            _employerName = value;
        }
    }
}

1 Ответ

0 голосов
/ 05 февраля 2019

Прежде всего, Маршрут

Не включайте строки запросов в маршрут к конечной точке, строки запросов по умолчанию привязываются к параметрам в сигнатуре метода, если вы их передаете.Определите маршрут контроллера с атрибутом RoutePrefix и метод метода с атрибутом Route.Оба будут объединены во время выполнения для создания маршрута метода, в этом случае api/Values/GetEmployeeData.

Затем параметры метода

Вам не нужно определятьHttpRequestMessage в качестве параметра.Вы можете получить это через HttpContext из метода, просто написав HttpContext.Current.

Наконец, вы объявляете dataTable, а затем переназначаете его после строки.Вы должны просто сделать последнее.

Итак, попробуйте это так

[RoutePrefix("api/Values")] 
public class ValuesController : ApiController
{
    retrieveEmployeeData empData = new retrieveEmployeeData();
    retrieveProductDetails prodDetls = new retrieveProductDetails();    

    [Route("GetEmployeeData")] 
    [HttpPost]
    public DataTable getEmployeeData([FromBody] Employer empDetails)
    {
        var dataTable = empData.getEmployeeData(empDetails);
        return dataTable;
    }
}

NOTE : имя getEmployeeData выглядит более подходящим дляПОЛУЧИТЕ запрос тогда ПОЧТА.

Кроме того, сделайте get и set в классе Employer более новым, более простым синтаксисом

public class Employer
{
    public string Company { get; set; }
    public string EmployerName { get; set; }
}

UPDATE Ваш клиент должен быть

angular.module('Test.Employer')
    .controller('EmployerController', ['$scope','headerValue', '$http',
        function ($scope, headerValue, $http) { 
            var ipEmployerDetls = {                   
                EmployerName: "cherokee",
                Company: "ABC"                   
            };

            $http({ 
                url: "http://localhost:212122/api/Values/GetEmployeeData", 
                method: 'POST', 
                data: JSON.stringify(ipEmployerDetls), 
                headers: { 
                    "Content-Type": "application/json" 
                } 
            }).success(function (response) { 
                $scope.object = response.data;
            }) 
                .error(function (error) { 
                    alert(error.Message); 
                });
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...