2017-09-26 72 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