尽量做到尽可能短。使用Northwind示例db。首先创建了一个Webapi项目db。创建了一个northwind edmx模型,让它创建所有模型类。然后创建Web客户端层以调用db以获取所有产品的列表。工作完美。
因此,在阅读之后,最佳实践并不是出于各种原因实际调用模型本身,而是创建和使用View Models。所以我创建的存储库创建了几个虚拟机,从客户端层调用控制器逐步进入存储库查询运行精细收集预期结果返回控制然后在那一点点击500错误没有访问控制允许原点?在WebApiConfig中启用了cors。在控制器级别,为客户端请求启用了cors。
因此,在这种情况下,为什么使用创建的模型可以做到这一点,但是当切换到视图模型时,这不起作用。
var result = entites.Products.ToList(); <-- this works same contrller
//var result = from p in entites.Products <-- same controller this doenst work
// join o in entites.Order_Details on p.ProductID equals o.ProductID
// select new ProductVm
// {
// ProductName = p.ProductName,
// QuantityPerUnit = p.QuantityPerUnit,
// UnitPrice = p.UnitPrice.Value,
// UnitsInStock = p.UnitsInStock.Value,
// UnitsOnOrder = p.UnitsOnOrder.Value,
// ReorderLevel = p.ReorderLevel.Value,
// OrderDetails = p.Order_Details.Select(x =>
// new OrderDetailVm
// {
// ProductId = o.ProductID
// })
// };
//returning VM causes 500 error no access control origin using same controller
return result;
WebApiConfig
// Web API routes
config.MapHttpAttributeRoutes();
config.EnableCors();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{search}",
defaults: new { search = RouteParameter.Optional }
);
启动控制器:
[EnableCors("http://localhost:54575", "*,", "*,")]
public class ProductController : ApiController
{
答案 0 :(得分:0)
var result = from p in entites.Products
join o in entites.Order_Details on p.ProductID equals o.ProductID
select new ProductVm
{
ProductName = p.ProductName,
QuantityPerUnit = p.QuantityPerUnit,
UnitPrice = p.UnitPrice.Value,
UnitsInStock = p.UnitsInStock.Value,
UnitsOnOrder = p.UnitsOnOrder.Value,
ReorderLevel = p.ReorderLevel.Value,
OrderDetails = p.Order_Details.Select(x =>
new OrderDetailVm
{
ProductId = o.ProductID
})
};
return result.ToList();