在一个WebAPI项目中,我有一个控制器,可以根据用户输入的值来检查产品的状态。
假设他们输入“ 123”,响应应该是“状态”:1,以及产品列表。如果输入“ 321”,则“状态”为0,并列出产品。
我的问题是,如何在WebAPI控制器中构建正确的字符串。
[Route("{value:int}")] public string GetProducts(int value) { var json = ""; var products = db.Products; if (products.Any()) { foreach (var s in products) { ProductApi product = new ProductApi(); product.Name = s.Name; json += JsonConvert.SerializeObject(supplier); } } var status = db.Status; if (status.Any()) { json += "{status:1}"; } else { json += "{status:0}"; } return json; } public class ProductApi { public string Name { get; set; } }
另外,此输出/响应是否被视为有效?
[ { "id":1, "name":"product name" }, { "id":2, "name":"product name 2" }, { "id":3, "name":"product name 3" } ] { "status": 0 }
因此,这是您的帖子的更改:
首先,您应该在传递text/html请求时让api默认返回Json (这是您要查找的吗?),并将此行添加到WebApiConfig类中:
text/html
WebApiConfig
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
其次,我更改了代码以返回真实对象,从而模拟了您的响应:
public class ProductApiCollection { public ProductApi[] Products { get; set; } public byte Status { get; set; } } public class ProductApi { public string Name { get; set; } }
方法主体:
public ProductApiCollection Get() { var result = new ProductApiCollection(); var dbProducts = db.Products; var apiModels = dbProducts.Select(x => new ProductApi { Name = x.Name } ).ToArray(); result.Products = apiModels; var status = db.Status.Any() ? 1 : 0; result.Status = status; return result; }
这将产生以下示例json:
{ "Products": [ { "Name": "Pork" }, { "Name": "Beef" }, { "Name": "Chicken" }, { "Name": "Salad" } ], "Status": 1 }
我强烈建议您不要对此类内容进行手动格式化,而应使用内置和第三方库。否则,您将重新发明已经可用,经过测试并准备工作的事物。