приложение / бизнес логи c за веб-API и ошибка проверки в пользовательском интерфейсе? - PullRequest
0 голосов
/ 16 января 2020

Я понимаю, что слой "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);
    }

1 Ответ

1 голос
/ 16 января 2020

Если вам нужно получить сообщение об ошибке от HttpResponseMessage, вы должны получить объект HttpError, как показано ниже. Затем объект HttpError содержит информацию ExceptionMessage, ExceptionType и StackTrace:

        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?
            HttpError error = responsePost.Content.ReadAsAsync<HttpError>().Result;
            Console.WriteLine("Internal server Error: "+error.ExceptionMessage);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...