2017-09-26 49 views
2

我正在關注AngularJS和WebAPI上的Pluralsight課程。我試圖使用PUT保存從客戶端發送到服務器的數據,但數據並未保存,我也沒有收到任何錯誤。此外,它不會觸發正確的服務器端代碼,因爲斷點不會被捕獲。我試圖改變HTTP方法的類型,但我需要這個。發回的唯一東西是來自服務器的"204: No Content"代碼。未將JSON數據保存在WebAPI中

這就是PUTPOST方法的樣子。任何這些方法的斷點都不會被捕獲。

// 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方法不會出現返回任何東西。我認爲他們應該回復一個迴應? –

+0

@ChrisNevill'204:No Content'是我猜測的默認響應,但它們不需要返回自定義響應來保存數據。這是問題所在。 – JustinJmnz

+0

奇怪的調試器沒有擊中你的斷點。你確定客戶端連接到正確的服務器,而不是IIS當你在IIS Express或類似的調試?我始終在Web API上使用斷點,它們確實有效。 –

回答

1

請檢查您的API是否實現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