pregunta corta. Aquí está mi controlador:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

using Milos_MovieStore.DAL;
using Milos_MovieStore.Models;
using Milos_MovieStore.DTO;
using System.Data.Entity;

namespace Milos_MovieStore.Controllers.Api
{
    public class CustomersController : ApiController
    {

        private DBContext_MovieStore _dbcontext;

        public CustomersController()
        {
            _dbcontext = new DBContext_MovieStore();
        }
        protected override void Dispose(bool disposing)
        {
            _dbcontext.Dispose();
        }



        //GET /api/customers
        [HttpGet]
        public IHttpActionResult GetCustomers()
        {
            List<Customer> customers = _dbcontext.Customers.Include(c => c.MembershipType).ToList();

            return Ok(CustomersToDTOList(customers));
        }

        //GET /api/customers/1
        [HttpGet]
        public IHttpActionResult GetCustomer(int id)
        {
            Customer customer = _dbcontext.Customers.Include(c => c.MembershipType).SingleOrDefault(c => c.Id == id);
            if (customer == null)
                return NotFound();

            return Ok(CustomerToDTO(customer));
        }

        //POST /api/customers
        [HttpPost]
        public IHttpActionResult CreateCustomer(CustomerDTO customerDTO)
        {
            if (!ModelState.IsValid)
                return BadRequest();

            _dbcontext.Customers.Add(DTOToCustomer(customerDTO));
            _dbcontext.SaveChanges();

            return Created(new Uri(Request.RequestUri + "/" + customerDTO.Id), customerDTO);
        }

        //PUT /api/customer/1
        [HttpPut]
        public IHttpActionResult UpdateCustomer(CustomerDTO customerDTO)
        {
            if (!ModelState.IsValid)
                return BadRequest();

            Customer customerInDB = _dbcontext.Customers.SingleOrDefault(c => c.Id == customerDTO.Id);
            if (customerInDB == null)
                return NotFound();

            MapDTOToCustomer(customerDTO, customerInDB);
            _dbcontext.SaveChanges();

            return Ok(customerDTO);
        }

        //DELETE /api/customer/1
        [HttpDelete]
        public IHttpActionResult DeleteCustomer(int id)
        {
            if (!ModelState.IsValid)
                return BadRequest();

            Customer customerInDB = _dbcontext.Customers.SingleOrDefault(c => c.Id == id);
            if (customerInDB == null)
                return NotFound();

            _dbcontext.Customers.Remove(customerInDB);
            _dbcontext.SaveChanges();

            return Ok(id);
        }




        private CustomerDTO CustomerToDTO(Customer customer)
        {
            CustomerDTO customerDTO = new CustomerDTO();

            customerDTO.Id = customer.Id;
            customerDTO.Name = customer.Name;
            customerDTO.DOB = customer.DOB;
            customerDTO.MembershipTypeId = customer.MembershipTypeId;
            customerDTO.IsSubscribedToNewsletter = customer.IsSubscribedToNewsletter;

            return customerDTO;
        }


        private Customer DTOToCustomer(CustomerDTO customerDTO)
        {
            Customer customer = new Customer();

            customer.Id = customerDTO.Id;
            customer.Name = customerDTO.Name;
            customer.DOB = customerDTO.DOB;
            customer.MembershipTypeId = customerDTO.MembershipTypeId;
            customer.IsSubscribedToNewsletter = customerDTO.IsSubscribedToNewsletter;

            return customer;
        }


        private void MapDTOToCustomer(CustomerDTO customerDTO, Customer customer)
        {
            customer.Id = customerDTO.Id;
            customer.Name = customerDTO.Name;
            customer.DOB = customerDTO.DOB;
            customer.MembershipTypeId = customerDTO.MembershipTypeId;
            customer.IsSubscribedToNewsletter = customerDTO.IsSubscribedToNewsletter;
        }

        private IEnumerable<CustomerDTO> CustomersToDTOList(IEnumerable<Customer> customers)
        {
            List<CustomerDTO> customersDTO = new List<CustomerDTO>();

            foreach (Customer c in customers)
            {
                customersDTO.Add(CustomerToDTO(c));
            }

            return customersDTO;
        }


    }
}

… aquí está mi DTO:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.ComponentModel.DataAnnotations;

namespace Milos_MovieStore.DTO
{
    public class CustomerDTO
    {
        public int Id { get; set; }
        [Required]
        [StringLength(255)]
        public string Name { get; set; }
        public DateTime? DOB { get; set; }
        public byte MembershipTypeId { get; set; }
        public bool IsSubscribedToNewsletter { get; set; }

    }
}

… y aquí está mi POST de solicitud:

… como se puede ver en la captura de pantalla estoy enviando DTO en JSON para PUBLICAR método de la API de controlador. No puedo encontrar la solución. ELIMINAR y OBTENER las solicitudes están trabajando sin ningún problema. Es un proyecto de formación, así que no te preocupes por esas extrañas asignación temporal de los métodos que he puesto en el controlador …

  • ¿Qué es el retorno Creado(new Uri(Solicitud.RequestUri + «/» + customerDTO.Id), customerDTO); ? Lo que se Crea() método?
  • … Es un método virtual en el Sistema.Web.Http para la creación de 201 «creado» respuesta http 200 OK. Uri en el argumento devuelve la cadena f.e.:»/api/clientes» …
InformationsquelleAutor cembo | 2017-11-28

2 Comentarios

  1. 54

    He encontrado una solución a esto.

    después de que me de partida edificio fue construido advertencias de ir a la ventana de salida, pero no se muestra en el principal error /advertencia de la ventana.

    comprobar su/salida de la ventana de error si hay errores o advertencia, a continuación, intente resolverlo..

    Iban a hacer con el montaje de los conflictos y dijo: recomiendo poner el ensamblado de redirección en la web.Config.

    Una vez que tuve fue a través de ellos todo lo que ahora funciona.

    por ejemplo :

      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
      </dependentAssembly>
    

    otra cosa que puedes probar es :
    hacer que su método como

    public IHttpActionResult CreateCustomer([FromBody]CustomerDTO customerDTO){}
    

    ver si esto ayuda..

    • Gracias. Agregar el código en la web.config ayudado. Ahora tengo que averiguar por qué 🙂 . Los mensajes de excepción en la ventana de salida fue: Excepción: «del Sistema.MissingMethodException’ en System.Web.Http.dll Excepción: ‘Sistema.MissingMethodException’ en mscorlib.dll Excepción: ‘Sistema.MissingMethodException’ en mscorlib.dll Excepción: ‘Sistema.MissingMethodException’ en mscorlib.dll
    • es tu problema se soluciona mediante el uso de este método?
    • +Saurabh Solanki … sí, gracias. He añadido el script de la web.config y funciona. ¿Puedo preguntar cuál era el problema real ? …
    • creo que se ha olvidado de agregar referencia de ensamblado, así que después de la adición de secuencia de comandos de configuración web se comienza a trabajar. si has encontrado mi respuesta útil, a continuación, se puede marcar como aceptado respuesta.. lo otro que visite a su pregunta, se puede obtuvo esta respuesta trabajado para usted o no..
    • Esto funcionó para mí … gracias!– y que se nota de que después de que el individuo advertencias, hubo una línea final que incluía a la totalidad de XML set para ser añadido a la web.config. Puedo copiar-pegar ese pedazo en el <tiempo de ejecución> la sección de la configuración y se aclaró todo.
    • Me salvó el día!!! ¿Alguien sabe la razón por la que funciona como esta? En mi caso simplemente dejó de funcionar en el servidor en Vivo. No hay asambleas se han cambiado … muy extraño
    • En mi caso, la entrada ya existía en la web.config, pero la versión más reciente de la gama así como la newVersion parámetro tapado en 2.0.0.0. La actualización de la misma a 4.2.0.0 arreglado las cosas.

  2. 3

    Tengo el mismo problema, pero desde un lado diferente.
    Tengo el Miproyecto con el Sistema.Net.Http biblioteca y MyUnitTestProject con el Sistema.Net.Http demasiado. Érase una vez, entonces empecé Unidad de Pruebas de choque con un problema extraño. No concluyente: la prueba no se ejecuta:

    Y donde fue la excepción «JetBrains terminó con código ….» que no dice nada para mí:

    Entonces me di cuenta de cuál era el problema de la redirección de enlace para el Sistema.Net.Http que fue añadido por algún paquete de NuGet. Puedo quitar la redirección de enlace, pero la ganancia que otra excepción, cerca de los tuyos «del Sistema.Net.Http.HttpRequestMessage…»:

    El problema era que en las versiones de las bibliotecas – en Miproyecto fue 4.0.0.0 (de .net Framework), pero MyUnitTestProject fue 4.2.0.0 (desde la carpeta de Visual Studio), y la redirección de enlace fue añadido para 4.2.0.0 que creo que de alguna manera no puede ser encontrado. Así que me cambio a 4.0.0.0 y es trabajado:

    <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
    

Dejar respuesta

Please enter your comment!
Please enter your name here