Я понимаю, что слой "service", в котором у меня есть логин для бизнеса / приложения c, должен находиться за слоем "web api". Здесь у меня есть слой "web api", в котором есть методы CRUD.
Итак, если я хочу добавить приложение / бизнес-логи, например, 1014 *, прежде чем добавлять нового сотрудника, я хочу проверить, чтобы сделать обязательно employee name
должен быть уникальным, я сделаю это, как показано ниже в моем веб-методе API PostEmployee
?
namespace WebApi.Controllers
{
public class EmployeeController : ApiController
{
private AppDbContext db = new AppDbContext();
// POST api/Employee
[ResponseType(typeof(Employee))]
public IHttpActionResult PostEmployee(Employee employee)
{
// application / business logic to put here, right?
db.Employees.Add(employee);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = employee.EmployeeID }, employee);
}
}
}
В моем пользовательском интерфейсе я использую проект консоли, в котором есть метод добавления сотрудника и приложение / бизнес logi c ошибка проверки, чтобы показать здесь, как показано?
static async Task AddEmployee()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(webAPIURL);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var employee = new Employee();
//POST Method
Console.Write("Enter your name: ");
employee.Name = Console.ReadLine();
Console.Write("Enter your position: ");
employee.Position = Console.ReadLine();
Console.Write("Enter your age: ");
employee.Age = Convert.ToInt16(Console.ReadLine());
Console.Write("Enter your salary: ");
employee.Salary = Convert.ToInt16(Console.ReadLine());
HttpResponseMessage responsePost = await client.PostAsJsonAsync("api/Employee", employee);
if (responsePost.IsSuccessStatusCode)
{
// Get the URI of the created resource.
Uri returnUrl = responsePost.Headers.Location;
if (returnUrl != null)
{
Console.WriteLine("Employee data successfully added.");
}
//Console.WriteLine(returnUrl);
}
else
{
// application / business logic validation error to show here?
Console.WriteLine("Internal server Error");
}
}
}
Найдено частичное решение (ниже). Но как распечатать исключение в консоли UI?
// POST api/Employee
[ResponseType(typeof(Employee))]
public IHttpActionResult PostEmployee(Employee employee)
{
var duplicateName = db.Employees.Where(b=>b.Name == employee.Name).SingleOrDefault();
if (duplicateName != null)
{
var msg = new HttpResponseMessage(HttpStatusCode.NotFound)
{
Content = new StringContent(string.Format("Duplicate employee name found. ")),
ReasonPhrase = "Duplicate"
};
throw new HttpResponseException(msg);
}
db.Employees.Add(employee);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = employee.EmployeeID }, employee);
}