2017-11-28 5 views
4

簡単な質問です。ここに私のコントローラは、次のとおりです。"メソッドが見つかりません: 'System.Net.Http.HttpRequestMessage System.Web.Http.ApiController.get_Request()'。"

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です:

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

    } 
} 

...と、ここに私のPOSTリクエストです:

Postman POST request

...などスクリーンショットでは、APIコントローラのJSONからPOSTメソッドでDTOを送信しています。私は解決策を見つけることができません。 DELETE要求とGET要求は問題なく動作しています。それは訓練プロジェクトですので、私がコントローラーに入れた奇妙な一時マッピングの方法については心配しないでください。

+0

(新しいウリ( Request.RequestUri + "/" + customerDTO.Id)、customerDTO); ? Created()メソッドとは何ですか? – toha

+0

... 200 OKの代わりに201 "作成された" 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に余分なコードを追加すると助けになりました。今私は理由を見つける必要があります:)。出力ウィンドウの例外メッセージは次のとおりです。 例外がスローされました:System.Web.Http.dllの 'System.MissingMethodException' 例外がスローされました:mscorlib.dllの 'System.MissingMethodException' 例外がスローされました:mscorlib.dllの 'System.MissingMethodException' 例外がスローされました:mscorlib.dllの 'System.MissingMethodException' – cembo

+0

がこのメソッドを使用して解決しますか? –

+1

+ Saurabh Solanki ...はい、ありがとうございます。私はあなたのスクリプトをweb.configに追加しています。実際の問題は何だったのでしょうか? ... – cembo

関連する問題