2017-09-26 2 views
2

AngularJS와 WebAPI의 Pluralsight 과정을 함께 진행하고 있습니다. PUT을 사용하여 클라이언트에서 서버로 전송되는 데이터를 저장하려고하는데 데이터가 저장되지 않고 오류가 발생하지 않습니다. 또한 중단 점이 포착되지 않아 이벤트가 올바른 서버 측 코드에 도달하지 않습니다. HTTP 메서드의 형식을 변경하려고했지만이 메서드가 필요합니다. 다시 보내지는 것은 서버의 "204: No Content" 코드입니다.WebAPI에 JSON 데이터가 저장되지 않습니다.

이것은 PUT과방법이 어떻게 보이는지입니다. 이러한 메서드의 중단 점은 캡처되지 않습니다.

// POST: api/Products 
public void Post([FromBody]Product product) // Creating a product 
{ 
    var productRepository = new ProductRepository(); 
    var newProduct = productRepository.Save(product); 
} 
// PUT: api/Products/5 
public void Put(int id, [FromBody]Product product) // Updating a product 
{ 
    var productRepository = new ProductRepository(); 
    var updatedProduct = productRepository.Save(id, product); 
} 

ProductRepository

은 다음과 같다 :

internal Product Save(Product product) 
{ 
    // Read in the existing products 
    var products = this.Retrieve(); 
    // Assign a new Id 
    var maxId = products.Max(p => p.ProductID); 

    product.ProductID = maxId + 1; 
    products.Add(product); 

    WriteData(products); 

    return product; 
} 

internal Product Save(int id, Product product) 
{ 
    // Read in the existing products 
    var products = this.Retrieve(); 

    // Locate and replace the item 
    var itemIndex = products.FindIndex(p => p.ProductID == product.ProductID); 
    if (itemIndex > 0) 
    { 
     products[itemIndex] = product; 
    } 
    else 
    { 
     return null; 
    } 

    WriteData(products); 
    return product; 
} 

이 사용되는 제어기의 주요부이다 (Controller-As syntax 사용 : 마지막

var vm = this; 
vm.submit = function() { 
    vm.message = ""; 
    if (vm.product.productID) { 
     vm.product.$update({ id: vm.product.productID }, function (data { 
      console.log(data); 
      vm.message = "Save Complete"; 
     }); 
    } else { 
     vm.product.$save(function (data) { 
      vm.originalProduct = angular.copy(data); 
      vm.message = "Save Complete"; 
     }); 
    } 
}; 

, productResource는 맞춤 서비스입니다 다음과 같이 표시됩니다.

var productResource = function($resource, appSettings) { 
    return $resource(appSettings.serverPath + "/api/Products/:id", null, { 
     'update': { method: 'PUT' } 
    }); 
} 

CORS 문제인지 확인하려고했지만 클래스 수준에서 사용하도록 설정 한 것이 아닙니다.

+0

귀하의 게시물이어야한다 당신의 API를 확인하고 웹 API 메소드가 표시되지 않습니다에 넣어주세요 아무것도 돌려 주려고. 나는 그들이 응답을 돌려줘야한다고 생각하니? –

+0

@ChrisNevill'204 : No Content'는 기본 응답입니다. 그러나 데이터를 저장하기 위해 사용자 정의 응답을 리턴 할 필요는 없습니다. 그게 바로 문제입니다. – JustinJmnz

+0

디버거가 중단 점을 치지 않는게 이상합니다. IIS에서 디버깅을 할 때 IIS가 아닌 클라이언트가 올바른 서버에 연결되어 있는지 확인하십시오. 나는 웹 API와 항상 중단 점을 사용하고 그들은 일을한다. –

답변

1

는 CORS (크로스 리소스 공유)를 구현하는 경우

+0

클래스 수준에서 사용할 수 있습니다. – JustinJmnz

1

하지

var itemIndex = products.FindIndex(p => p.ProductID == product.ProductID); 

var itemIndex = products.FindIndex(p => p.ProductID == id); 
+0

맞아,하지만이게 문제를 해결하지 못해. – JustinJmnz

+0

'global.asax.cs'에서 라우팅하는 방법은 무엇입니까? 코드가 브레이크 포인트를 치지 않고 있다고 말하고 있기 때문에. – Shiva

관련 문제