【问题标题】:Servicestack service not loadingServicestack服务未加载
【发布时间】:2018-12-23 20:36:29
【问题描述】:

我迷路了……我错过了什么。我复制了一个工作服务并将其重命名。该服务不会加载到服务堆栈中。无法通过 api 访问且未显示在元数据页面中...

代码如下

    using cbw.service.models.Models;
using ServiceStack;

namespace cbw.service.models.Routes
{
    /// <summary>
    /// Company RTO - Response DataObject with custom Route
    /// </summary>
    [Route("/GetPermission/{Id}", "GET")]
    public class GetPermission : IReturn<GetPermission>
    {
        public int Id { get; set; }
    }

    [Route("/Permission", "PUT")]
    public class AddPermission : PostReturn
    {
        public string Name { get; set; }
        public string Description { get; set; }
        public int AuditUserId { get; set; }
    }

    [Route("/Permission/{Id}", "PUT")]
    public class UpdatePermission : IReturn<UpdatePermission>
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public int AuditUserId { get; set; }
    }

    [Route("/Permission/{Id}", "DELETE")]
    public class DeletePermission : IReturnVoid
    {
        public int Id { get; set; }
    }
}



using System;
using cbw.service.models.Models;
using cbw.service.models.Routes;
using ServiceStack;
using ServiceStack.OrmLite;

namespace cbw.service.interfaces.Services
{
    /// <summary>
    /// 
    /// </summary>
    //[Authenticate]
    public class SecurityService : Service
    {
        /// <summary>
        /// To insert new permission
        /// </summary>
        /// <returns></returns>
        public long AddPermission(AddPermission request)
        {
            var perm = request.ConvertTo<Permission>();
            perm.AuditUserId = Convert.ToInt32(UserInfo.UserSession().UserAuthId);
            return Db.Insert(perm);
        }

        /// <summary>
        /// To Update permission
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public int UpdatePermission(UpdatePermission request)
        {
            using (var trans = Db.OpenTransaction())
            {
                //Insert Historical
                var permissionHist = Db.SingleById<Permission>(request.Id).ConvertTo<PermissionHist>();
                permissionHist.Action = DbAction.Update;

                //update Permission
                var perm = request.ConvertTo<Permission>();
                perm.AuditUserId = Convert.ToInt32(UserInfo.UserSession().UserAuthId);

                var i = Db.Update(perm);
                Db.Insert(permissionHist);

                trans.Commit();
                return i;
            }
        }

        /// <summary>
        /// To delete permissions
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public int DeletePermisssion(DeletePermission request)
        {
            //Insert Historical
            Db.Insert(Db.SingleById<Permission>(request.Id).ConvertTo<PermissionHist>().Action = DbAction.Delete);

            return Db.Delete<Permission>(c => c.Id == request.Id);
        }

    }
}

【问题讨论】:

    标签: servicestack


    【解决方案1】:

    ServiceStack 服务的方法应该是它应该处理的 HTTP 动词的名称,例如 Get/Post/Put/Delete/Patch 等,或者 Any 来处理任何动词上的请求。

    响应应与请求 DTO 的 IReturn&lt;TResponse&gt; 接口标记中的内容相匹配,请求 DTO 通常是响应 DTO。它不应该是原始值类型,如intlong,但可以是原始引用类型,如stringbyte[]

    或者,如果您的请求 DTO 具有 IReturnVoid 接口标记,您的服务方法应该是 void

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      相关资源
      最近更新 更多