2017-11-28 12 views
4

짧은 질문. 여기 내 컨트롤러 :로 ..."메서드를 찾을 수 없습니다 : 'System.Net.Http.HttpRequestMessage System.Web.Http.ApiController.get_Request()'."

Postman POST request

: 여기 내 POST 요청한다

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; } 

    } 
} 

... 그리고 :

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; 
     } 


    } 
} 

... 여기 내 DTO이다 당신은 스크린 샷에서 JSON에서 DTO를 API 컨트롤러의 POST 메서드로 보내고 있습니다. 솔루션을 찾을 수 없습니다. DELETE 및 GET 요청은 문제없이 작동합니다. 그것은 훈련 프로젝트이므로 컨트롤러에 넣은 그 이상한 임시 매핑 방법에 대해 걱정하지 마십시오.

+0

(새 열린 우리당 (Request.RequestUri + "/"+ customerDTO.Id), customerDTO); ? Created() 메소드 란 무엇입니까? – toha

+0

... 200 OK 대신에 201 "created"HTTP 응답을 생성하기위한 System.Web.Http의 가상 메소드입니다. Uri의 인수는 문자열 f.e.:"/api/customers "... – cembo

답변

9

이 문제에 대한 해결책을 찾았습니다.

건물을 시작한 후 빌드 경고가 출력 창으로 이동했지만 주 오류/경고 창에는 표시되지 않았습니다. 그들은 조립 충돌 함께 할 수 있었다

오류 또는 그것을 해결하려고 다음 경고가있는 경우 출력/오류 창을 확인

는 .. 어셈블리의 Web.config에 재 두는 것을 권장했다.

일단 내가 모두 다 통과했다면 이제는 작동합니다. 예를 들어

: 당신이 시도 할 수

<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> 

다른 것입니다 :이 도움이된다면 볼

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

처럼 방법을 .. 만든 돌아갑니다 무엇

+0

을 반환합니다. web.config에 추가 코드를 추가하면 도움이됩니다. 이제 나는 이유를 찾아야 해. 출력 창에 예외 메시지가 있습니다 : 예외가 throw되었습니다. System.Web.Http.dll의 'System.MissingMethodException' 예외가 throw되었습니다. mscorlib.dll의 'System.MissingMethodException' 예외가 throw됩니다. mscorlib.dll의 'System.MissingMethodException'예외가 발생했습니다. 예외가 throw되었습니다. mscorlib.dll의 'System.MissingMethodException' – cembo

+0

이이 메서드를 사용하여 문제를 해결할 수 있습니까? –

+1

+ Saurabh Solanki ... 네, 고마워요. 스크립트를 web.config에 추가했는데 제대로 작동합니다. 실제 문제가 무엇인지 물어봐도 될까요? ... – cembo