2015-06-19 77 views
0

我正在通過使用WCF和實體框架的Web服務工作,我想知道如何查看或返回HTTP狀態代碼給調用客戶端。如何在服務響應中顯示WCF HTTP代碼

我的代碼如下:

IUserService.cs

[OperationContract] 
     [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest, UriTemplate = "/GetUsers")] 
     List<User> GetUsers(); 

UserService.svc.cs

public List<User> GetUsers() 
     { 
      var userController = new UserController(); 
      return userController.GetUsers(); 
     } 

UserController.cs

public List<User> GetUsers() 
     { 
      List<User> serverResponse = new List<User>(); 

      try 
      { 
       using (var db = new MyEntities()) 
       { 
        List<user> userList = db.users.ToList(); 

        foreach (user userRecord in userList) 
        { 
         User userDto = new User(); 
         userDto.userId = userRecord.user_id; 
         userDto.name = userRecord.user_name; 
         serverResponse.Add(userDto); 
        } 
       } 
      } 

      catch (Exception ex) 
      { 

      } 

      return serverResponse; 

用戶DTO

[DataContract] 
    public class User 
    { 
     [DataMember(Name = "name")] 
     public string name { get; set; } 

     [DataMember(Name = "userId")] 
     public int userId { get; set; } 

    } 

我在客戶端調用響應一個鍵值對使用時或在該狀態代碼可以像響應字典返回其他API的工作,例如「成功」,「200」見過。有沒有辦法在Web.Config或Interface類中爲WCF啓用這樣的功能?我希望客戶能夠收到錯誤代碼,以便在出現問題時成功或失敗。當我運行在瀏覽器這一請求,我得到以下有效的JSON:

[ 
    { 
     "name": "APIClientTestUser", 
     "userId": 212, 
    } 
] 

無論是與此JSON或別的地方,我想客戶知道,調用成功或相應的HTTP代碼失敗。任何提示或建議如何做到這一點將不勝感激。

回答

1

可能是最簡單的方法是來包裝你的成果轉化爲通用的應答對象

[DataContract] 
public class Response<T> 
{ 
    [DataMember] 
    public T Result { get; set; } 

    [DataMember] 
    public int Status { get; set; } 
} 

// then your declaration 
Response<List<User>> serverResponse = Response<List<User>>(); 

// on success 
serverResponse.Result = userList; 
serverResponse.Status = 200; // ok 

// on fail 
serverResponse.Status = 500; // fail 

// and contract 
[OperationContract] 
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest, UriTemplate = "/GetUsers")] 
Response<List<User>> GetUsers(); 
+0

謝謝,這確實正是我需要的。 – zic10