如何在服务响应中显示WCF HTTP代码

本文关键字:显示 WCF HTTP 代码 响应 服务 | 更新日期: 2023-09-27 17:57:27

我正在使用WCF和实体框架处理web服务,我想知道如何查看HTTP状态代码或向调用客户端返回HTTP状态代码。

我的代码如下:

IUserService.cs

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

用户服务.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时看到,状态代码可以在类似字典的响应中返回,例如客户端调用响应中的键值对中的"success"200"。有没有一种方法可以在web中为WCF启用这样的功能。Config还是Interface类?我希望客户端能够接收成功或失败的错误代码,以便在出现问题时做出反应。当我在浏览器中运行此请求时,我会返回以下有效的JSON:

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

无论是使用这个JSON还是其他地方,我都希望客户端通过适当的HTTP代码知道调用成功还是失败。任何关于如何做到这一点的提示或建议都将不胜感激。

如何在服务响应中显示WCF 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();