2013-08-27 45 views
1

這是DTOServiceStack操作沒有在元數據中表示

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) 
     { 


     } 
    } 

Service Stack Operations are not showoing

我的問題是,爲什麼EmployeeServices梅託德未在元數據顯示? 有什麼額外的事情我需要做?

回答

7

ServiceStack匹配使用的HTTP動詞的方法名稱經營,所以不是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定義。

+0

謝謝..它的工作現在:) ServiceStack方法是基於動詞:)感謝您的幫助:) –

3

您似乎沒有配置任何路由,也沒有遵守服務操作的命名約定。

所以,你應該用路由屬性裝點您的要求DTO:

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

,讓您的業務運營與你希望它是用(GET你的情況)訪問的HTTP動詞被命名爲:

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

現在,當您導航到GET /employees時,Get操作將被執行。

記住,你還可以配置使用Fluent API你的路由,而不是使用路由屬性:

Routes.Add<Employee>("/employees", "GET"); 
+0

感謝您的幫助,現在正在工作:)爲您的答案+1,並給予流利的API選項:) –

相關問題