[英]ASP.NET Web API not getting newly posted item
我正在學習ASP.NET Web API的工作方式,因為我正在從事的項目需要它。 我正在使用OWIN在WPF應用程序中托管Web API。
我無法使POST方法生效。 當我發布新產品時,它將被添加到產品列表中,但是當我嘗試獲取所有產品時,它不會顯示。
這是我用來測試的課程:
class Program
{
const string baseAddress = "http://localhost:9000/";
static void Main(string[] args)
{
// Start OWIN host
using (WebApp.Start<Startup>(url: baseAddress))
{
RunAsync().Wait();
}
Console.ReadLine();
}
static async Task RunAsync()
{
using(var client = new HttpClient())
{
client.BaseAddress = new Uri(baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//GET initial products
HttpResponseMessage response = await client.GetAsync("api/products/");
if (response.IsSuccessStatusCode)
{
Console.WriteLine(await response.Content.ReadAsStringAsync() + "\n");
}
//POST new product
Product gizmo = new Product() { Id = 4, Name = "Gizmo", Price = 50, Category = "Widget"};
try
{
response = await client.PostAsJsonAsync("api/products", gizmo);
response.EnsureSuccessStatusCode();
}
catch (HttpRequestException e)
{
Console.WriteLine(e.Message);
}
//GET all products (should contain gizmo product)
response = await client.GetAsync("api/products/");
if (response.IsSuccessStatusCode)
{
Console.WriteLine(await response.Content.ReadAsStringAsync() + "\n");
}
}
}
}
這是我的Controller類:
public class ProductsController : ApiController
{
List<Product> products = new List<Product>();
public ProductsController()
{
products.Add(new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 });
products.Add(new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M });
products.Add(new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M });
}
public IEnumerable<Product> Get()
{
return products;
}
public IHttpActionResult Get(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
public void Post(Product product) {
products.Add(product);
Console.WriteLine("Product Added: " + products[products.Count - 1].Name + "\n");
}
}
輸出顯示新的Gizmo項目已添加到列表中:
[{"Id":1,"Name":"Tomato Soup","Category":"Groceries","Price":1.0},{"Id":2,"Name":"Yo-yo","Category":"Toys","Price":3.75},{"Id":3,"Name":"Hammer","Category":"Hardware","Price":16.99}]
Product Added: Gizmo
[{"Id":1,"Name":"Tomato Soup","Category":"Groceries","Price":1.0},{"Id":2,"Name":"Yo-yo","Category":"Toys","Price":3.75},{"Id":3,"Name":"Hammer","Category":"Hardware","Price":16.99}]
您的控制器構造函數可能會為每個請求調用(請記住,HTTP是無狀態的)。
為您的List<Product>
使用永久性存儲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.