如何在服务响应中显示 WCF HTTP 代码
How to display WCF HTTP codes in service response
我正在使用 WCF 和 Entity Framework 通过 Web 服务工作,我想知道如何查看或 return 调用客户端的 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 时看到状态代码可以像响应一样 returned 在字典中,例如 "success"“200”在键值对中客户端调用响应。有没有办法在 web.Config 或接口 class 中为 WCF 启用类似的功能?我希望客户端能够收到成功或失败的错误代码,以便在出现问题时能够做出反应。当我在浏览器中 运行 这个请求时,我得到以下有效 JSON:
[
{
"name": "APIClientTestUser",
"userId": 212,
}
]
通过此 JSON 或其他方式,我希望客户端通过适当的 HTTP 代码知道调用成功或失败。任何有关如何执行此操作的提示或建议将不胜感激。
可能最简单的方法是将结果包装到通用响应对象中
[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();
我正在使用 WCF 和 Entity Framework 通过 Web 服务工作,我想知道如何查看或 return 调用客户端的 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 时看到状态代码可以像响应一样 returned 在字典中,例如 "success"“200”在键值对中客户端调用响应。有没有办法在 web.Config 或接口 class 中为 WCF 启用类似的功能?我希望客户端能够收到成功或失败的错误代码,以便在出现问题时能够做出反应。当我在浏览器中 运行 这个请求时,我得到以下有效 JSON:
[
{
"name": "APIClientTestUser",
"userId": 212,
}
]
通过此 JSON 或其他方式,我希望客户端通过适当的 HTTP 代码知道调用成功或失败。任何有关如何执行此操作的提示或建议将不胜感激。
可能最简单的方法是将结果包装到通用响应对象中
[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();