1

这是 DTO

public class Employee
    {
        public int EmployeeID { get; set; }
        public string EmployeeName { get; set; }
        public string EmployeeeAddress { get; set; }

    }

这是响应

 public class EmployeeResponse
    {
        public List<Employee> listofemp { get; set; }
    }

这是服务堆栈服务

public class EmployeeServices:Service
    {
        public dbRepo<Employee> objEmploye; //Repository (which is working fine)

        public EmployeeServices()
        {
            objEmploye = new dbRepo<Employee>();
        }


      public object getAll(Employee obj)
      {
          var objlist = new EmployeeResponse {listofemp = objEmploye.GetAll().ToList()};
          return objlist.listofemp;
      }

    }

这是 AppHostBase 类

public class ServiceHostApp:AppHostBase
    {
        public ServiceHostApp()
            : base("ServiceStack WebSerivces", typeof(EmployeeServices).Assembly)
        {
        }
        public override void Configure(Funq.Container container)
        {


        }
    }

服务堆栈操作未显示

我的问题是为什么 EmployeeServices Metod 没有显示在元数据中?我还需要做些什么吗?

4

2 回答 2

7

ServiceStack 对与所使用的 Http Verb 匹配的方法名称进行操作,因此getAll您应该真正使用Get(或者All如果可以使用任何动词来做到这一点)而不是您。

无需退货object...

  public List<Employee> Get(Employee obj)
  {
      var objlist = new EmployeeResponse {listofemp = objEmploye.GetAll().ToList()};
      return objlist.listofemp;
  }

最后,您可以随时装饰Employee

[Route("/Employee")]
public class Employee
{
    public int EmployeeID { get; set; }
    public string EmployeeName { get; set; }
    public string EmployeeeAddress { get; set; }

}

该属性在命名空间中定义ServiceStack.ServiceHost

于 2013-08-27T15:11:42.987 回答
3

您似乎没有配置任何路由,也没有遵守服务操作的命名约定。

因此,您应该使用 Route 属性装饰您的请求 DTO:

[Route("/employees")]
public class Employee
{
    public int EmployeeID { get; set; }
    public string EmployeeName { get; set; }
    public string EmployeeeAddress { get; set; }
}

并使用您希望它可以访问的 HTTP 动词命名您的服务操作(在您的情况下为 GET):

public object Get(Employee obj)
{
    var objlist = new EmployeeResponse {listofemp = objEmploye.GetAll().ToList()};
    return objlist.listofemp;
}

现在,当您导航到GET /employeesGet 操作时将执行。

请记住,您还可以Fluent API使用 Route 属性而不是使用 Route 属性来配置您的路由:

Routes.Add<Employee>("/employees", "GET");
于 2013-08-27T15:11:50.273 回答