我正在考虑使用ASP MVC5
和Breeze.js
创建一个AngularJS
项目(不是WebApi,我必须坚持使用ASP.MVC)但是我面临各种各样的因为文档在实现这一点上没有完成的问题(所有新的例子都是用WebApi完成的)。我通过NuGet(Breeze.WebApi2)上找到的包创建了一个MVC控制器,所以我设法编译,但我不确定它是否真的有效,我觉得它没有做我想要的魔法。如果我转到http://localhost/breeze/MyBreeze/MetaData
,我会得到它的JSON对象,很酷的部分可行,但如果我尝试使用此http://localhost/breeze/MyBreeze/Attendees
来获取参加者,那么我唯一得到的就是SQL查询,所以没有JSON数据,我猜我想要......我呢? Breeze.WebApi2
和[BreezeController]
是否适用于ASP MVC5(同样不适用于WebApi)?
这是我的MVC5控制器:
using Breeze.ContextProvider;
using Breeze.ContextProvider.EF6;
using Breeze.WebApi2;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TemplateBreezeAngularMVC5.Models;
namespace TemplateBreezeAngularMVC5.Controllers
{
[BreezeController]
public class MyBreezeController : Controller
{
static readonly TimeSpan RefreshRate = TimeSpan.FromMinutes(60);
private static readonly object Locker = new object();
static DateTime _lastRefresh = DateTime.Now; // will first clear db at Now + "RefreshRate"
// static DateTime lastRefresh = DateTime.MinValue; // will clear when server starts
private readonly EFContextProvider<ConferenceContext> _contextProvider = new EFContextProvider<ConferenceContext>();
public MyBreezeController()
{
}
[HttpGet]
public string Metadata()
{
return _contextProvider.Metadata();
}
[HttpGet]
public IQueryable Attendees()
{
return _contextProvider.Context.Attendees;
}
[HttpGet]
public IQueryable Presentations()
{
return _contextProvider.Context.Presentations;
}
[HttpGet]
public IQueryable Speakers()
{
return _contextProvider.Context.Speakers;
}
[HttpPost]
public SaveResult SaveChanges(JObject modifications)
{
return _contextProvider.SaveChanges(modifications);
}
}
}
这里也是我的Angular代码,非常基本,我只是想让查询工作并返回数据虽然失败并返回查询,比如SELECT [Extent1].[Id] AS [Id], ...
,但我想这是因为MVC控制器不是'工作正常。无论如何,这是我的Angular代码:
breeze.config.initializeAdapterInstance('modelLibrary', 'backingStore', true);
//Q.stopUnhandledRejectionTracking();
var myApp =
angular
.module('myApp', ['ngRoute', 'breeze.angular', 'breeze.directives'])
.controller("SpeakersCtrl", function ($scope) {
var manager = new breeze.EntityManager('/breeze/MyBreeze');
var query = new breeze.EntityQuery.from("Speakers");
manager.executeQuery(query).then(function (data) {
$scope.results = data.results;
$scope.$apply();
}).fail(function (e) {
alert(e);
});
});
然后我安装的NuGet包是AngularJS
,Breeze.Client
,WebApi2.EF6
,Breeze.Angular.Directives
,Breeze.Angular
,Breeze.Server.ContextProvider.EF6
,Breeze.Server.ContextProvider
,Breeze.Server.WebApi2
,EntityFramework 6.0
,jQuery
,Json.NET
,Q
我也试图得到旧HotTowel MVC4
,但它缺少很多东西而且没有让它起作用。
编辑
值得一提的是,我想使用ASP MVC的原因是我的公司强迫我使用它,也因为我不会制作SPA。
答案 0 :(得分:2)
为了回答我自己的问题,在Steeve Schmitt和Ward的帮助下,我得出的结论是,我可以将我的项目保留为ASP MVC,但保留BreezeController
作为WebApi控制器。将MVC控制器与WebApi控制器混合没有问题。我不得不改变这个:
public class MyBreezeController : Controller
到此:
public class MyBreezeController : ApiController
并且还要确保项目的BreezeWebApiConfig.cs
部分正确设置路由。瞧!!!“