servicestack,C#,Asp.net Mvc 4,Angularjs,servicestack" /> servicestack,C#,Asp.net Mvc 4,Angularjs,servicestack" />

C# 带有ServiceStack/WebApi/MVC操作的AngularJS

C# 带有ServiceStack/WebApi/MVC操作的AngularJS,c#,asp.net-mvc-4,angularjs,servicestack,C#,Asp.net Mvc 4,Angularjs,servicestack,我是AngularJS的新手,希望在基于ASPNET MVC的新项目中使用它。我希望AngularJS来管理视图(它将是混合SPA,一些页面是普通MVC生成的视图)。但我有权决定在服务器端选择什么。i、 e.ServiceStack/WebApi/MVC操作?web上有WebAPI和常规ASPNET MVC的示例,但找不到任何SS+示例。你能给我一个SS+Angular的示例项目(如何管理路由,防止用户直接打开视图(html文件)等等)。这就是你想要的吗 SocialBootstrap项目包含一

我是AngularJS的新手,希望在基于ASPNET MVC的新项目中使用它。我希望AngularJS来管理视图(它将是混合SPA,一些页面是普通MVC生成的视图)。但我有权决定在服务器端选择什么。i、 e.ServiceStack/WebApi/MVC操作?web上有WebAPI和常规ASPNET MVC的示例,但找不到任何SS+示例。你能给我一个SS+Angular的示例项目(如何管理路由,防止用户直接打开视图(html文件)等等)。

这就是你想要的吗


SocialBootstrap项目包含一个不错的完整堆栈设置,它使用backbone.js和underline.js,但不是棱角分明的-阅读它可能会有所帮助


尽管如此,在本例中,服务层与前端紧密耦合,因为它们都包含在同一个项目中。这是我在大型水疗中心尽量避免的事情。

几个月前,我为2013年芝加哥代码夏令营准备了一份()。AppHarbor上的示例站点似乎已关闭(我让AppHarbor站点正常工作,但我所有的“生产配置”都在GitHub repo中。我永远无法在GitHub和它们之间获得正确的配置/设置),但我认为代码与您的要求类似。它使用AngularJS(可能不是最好的例子),.NETMVC w/ServiceStack托管在/api。它还使用Twitter引导、Redis Pub/Sub和SignalR……可能在这个项目/示例中使用了太多东西。如果可以安装Redis(),并将web.config文件中的
redisUrl
更改为
localhost:6379
,则应该可以在本地运行它

我在项目中使用ServiceStack+ASP.NET MVC+Angular

安装ServiceStack后(使用nugget软件包非常简单),调用ServiceStack Rest WS非常简单,在服务中使用angular:

GetById: function (movieId) {
    var url = root + 'api/movie/' + movieId;
    var promise = $http({ method: 'GET', url: url }).then(function (response) {
        return response.data;
    });

    return promise;
}, ...
在ServiceStack中,我使用DTO和ViewModel,如下所示:

#region MovieDTO
[Api("GET Movie by Id")]
[Route("/movie/{Id}")]
public class MovieDTORequest
{
    public int Id { get; set; }
}

public class MovieDTOResponse
{
    public MovieViewModel Movie{ get; set; }
}

#endregion
为了完成我的服务:

private MovieBusiness _movieBusiness= (MovieBusiness )UnityHelper.BusinessResolve<Movie>();
public object Get(MovieDTORequest request)
{
    Movie movie = _movieBusiness.GetById(request.Id);
    MovieViewModel movieViewModel = MovieAdapter.ToViewModel(movie);

    return new MovieDTOResponse { Movie = movieViewModel };
}

我简化了我所有的例子,使其易于理解,但如果您需要更多的解释,请告诉我

我正在做一个SS+AngularJs+Signaler,我可以对您说,我对此并不后悔,我个人觉得非常直截了当,该框架旨在使用插件和您的IoC(在我的情况下,我使用SimpleInjector)

我分别研究了angular和SS,因为angular中的REST调用可能与后端无关,但您仍然需要解决诸如前端和后端之间的集成安全性、路由等问题

你可以找到一个使用SS+angularJs的小演示,你可以看看这个和这个


我希望这有帮助

它有SS+角度的例子吗@Silas我需要带有AngularJS示例项目的ServiceStack,我不知道它是否专门有服务堆栈,但它确实有路由,至少可以让您了解如何将angular集成到MVC项目中。如果我没记错的话,服务堆栈只是普通的堆栈,无论出于何种目的,都有特定的API。我错了吗?ServiceStack提供了一个RESTful服务作为后端。Angular可以使用RESTful服务来创建前端。两者之间没有实际的耦合。我在想哪一个在性能方面会更好(可能是SS,因为根据他们的网站,它的JSON序列化程序是最快的。这就是为什么我在寻找同样情况下也有一个工作示例的帖子,所以如果你想交换想法,请与我联系。这里有一个我正在使用的文章和代码的资源,谢谢。这是我正在寻找的。这是一个地狱般的c用于学习的ool示例,包含了我想要的所有内容。再次感谢您的帮助。将示例/代码与演讲结合起来更容易理解。这也是我第一次尝试AngularJS、Redis和SignalR,因此使用可能不会遵循“最佳实践”。但是,这是一个有趣的玩具项目。我不是在寻找最佳实践,而是一个有趣的项目与SS合作的样本,但我得到了一些奖励。对于像我这样的新手来说,这将是一个很大的帮助,我可以在AngularJS@paaschpaThanks上尝试一下。我现在将在@Pedro上查看它
[ProfilingActionFilter]
public class BaseController : ServiceStackController<CustomUserSession>
{
    /// <summary>
    /// Surcharge de l'action pour charger la notification dans le ViewBag s'il y en a une et l'a marquer comme delivrée
    /// </summary>
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
        int Id = 0;
        UserViewModel user= new UserViewModel ();

        if (int.TryParse(base.UserSession.UserAuthId, out Id))
        {
            user= new UserViewModel ()
            {
                id = Convert.ToInt32(base.UserSession.UserAuthId),
                nom = base.UserSession.DisplayName,
                roles = base.UserSession.Roles != null ? string.Join(",", base.UserSession.Roles.ToArray()) : string.Empty
            };
        }
        ViewBag.User= user;
    }
@model AddictLive.Core.ViewModel.Mobile.ViewModels.MovieViewModel
@using Newtonsoft.Json

<div ng-controller="MovieController" ng-init="init(@Html.Raw(JsonConvert.SerializeObject(Model)))">
     ...
</div>
$scope.init = function (movieViewModel) {
    $scope.property1= movieViewModel.property1;
    $scope.property2= movieViewModel.property2;
};