Прежде всего, Маршрут
Не включайте строки запросов в маршрут к конечной точке, строки запросов по умолчанию привязываются к параметрам в сигнатуре метода, если вы их передаете.Определите маршрут контроллера с атрибутом 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);
});
})();