Пример #1
0
        /// <summary>
        /// Adds the rest handlers.
        /// </summary>
        /// <param name="services">The services.</param>
        public void Init(IEnumerable <IRestfulService> services)
        {
            _restServices.AddRange(services);

            _logger.Info("Calling EndpointHost.ConfigureHost");
            EndpointHost.ConfigureHost(this, ServerName, CreateServiceManager());

            _logger.Info("Registering protobuf as a content type filter");
            ContentTypeFilters.Register(ContentType.ProtoBuf, (reqCtx, res, stream) => ProtobufSerializer.SerializeToStream(res, stream), (type, stream) => ProtobufSerializer.DeserializeFromStream(stream, type));

            _logger.Info("Calling ServiceStack AppHost.Init");
            Init();
        }
Пример #2
0
        public override void Configure(Container containerFunq)
        {
            Log.Info("Configure AppHost");
            new Module().Init(UnityServiceLocator.Instance);

            var container = UnityServiceLocator.Instance;

            containerFunq.Adapter = new UnityContainerAdapter(container, new Logger());

            var serverSettings = container.Resolve <IServerSettings>();

            Plugins.Add(new AuthFeature(() => new AuthUserSession(),
                                        new IAuthProvider[]
            {
                new CustomCredentialsAuthProvider(UnityContainerExtensions.Resolve <ICommandBus>(container),
                                                  UnityContainerExtensions.Resolve <IAccountDao>(container),
                                                  UnityContainerExtensions.Resolve <IPasswordService>(container),
                                                  UnityContainerExtensions.Resolve <IServerSettings>(container)),
                new CustomFacebookAuthProvider(UnityContainerExtensions.Resolve <IAccountDao>(container)),
                new CustomTwitterAuthProvider(UnityContainerExtensions.Resolve <IAccountDao>(container))
            }));

            Plugins.Add(new ValidationFeature());
            containerFunq.RegisterValidators(typeof(SaveFavoriteAddressValidator).Assembly);

            RequestFilters.Add((httpReq, httpResp, requestDto) =>
            {
                var authSession = httpReq.GetSession();
                if (authSession != null && !string.IsNullOrEmpty(authSession.UserAuthId))
                {
                    var account = container.Resolve <IAccountDao>().FindById(new Guid(authSession.UserAuthId));
                    if (account == null || account.DisabledByAdmin)
                    {
                        httpReq.RemoveSession();
                    }
                }
            });


            SetConfig(new EndpointHostConfig
            {
                GlobalResponseHeaders =
                {
                    { "Access-Control-Allow-Origin",  "*"                               },
                    { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" },
                },

                EnableFeatures = (serverSettings.ServerData.ShowAPIMetadata ? Feature.All : Feature.All.Remove(Feature.Metadata))
            });


            ContentTypeFilters.Register("text/x-csv", CsvCustomSerializer.SerializeToStream, CsvCustomSerializer.DeserializeFromStream);
            ResponseFilters.Add((req, res, dto) =>
            {
                if (req.ResponseContentType == "text/x-csv")
                {
                    res.AddHeader(HttpHeaders.ContentDisposition,
                                  string.Format("attachment;filename={0}.csv", req.OperationName));
                }
            });

            Log.Info("Configure AppHost finished");
        }