首页 > 解决方案 > 如何正确地将字符串 id 传递给 Xamarin.Forms 中的 API 控制器

问题描述

我正在使用 Xamarin Forms 编写一个移动应用程序,我将在其中使用 REST API。

目前,我有一个用户模型

    {
        public string UserId { get; set; }
        public string UserDisplayName { get; set; }
        public int UserRoleId { get; set; }
        public string UserFirstName { get; set; }
        public string UserLastName { get; set; }
        public string UserEmail { get; set; }
        public string UserPostcode { get; set; }
        public DateTime UserCreatedAt { get; set; }
        public DateTime UserModifiedAt { get; set; }
        public bool UserDeletedAt { get; set; }
    }

我在我的控制器上定义了一个 GetUser 方法

 // GET: api/Users/5
        [HttpGet("{id}")]
        public async Task<ActionResult<User>> GetUser(string id)
        {
            
            var user = await _context.User.FindAsync(id);

            if (user == null)
            {
                return NotFound();
            }

            return user;
        }

如果我使用 Postman 测试 API 并在路由上解析没有引号(编辑)的字符串 id,它工作正常。例如 https://localhost:5051/api/Users/Example。但是,如果我在 qutoes(edit) 中解析 id 它不起作用: https://localhost:5051/api/Users/"Example"

我的问题是,在我的移动客户端上,当它调用调用 API 的 Web 服务时,它需要解析一个字符串,该字符串与引号(编辑)相匹配 - 匹配第二个示例。

你们中有人知道解决方案或解决方法吗?

提前致谢

编辑:

我的服务方式如下

     public static async Task<IEnumerable<User>> GetUserById(string id)
        {           
            var json = await client.GetStringAsync($"api/users/{id}");
            var users = JsonConvert.DeserializeObject<IEnumerable<User>>(json);
            return users;
        }

我的服务电话是

var users = await UserService.GetUserById("Example");

EDIT2:固定

服务方式改为

     public static async Task<User> GetUserById(string id)
        {           
            var json = await client.GetStringAsync($"api/users/{id}");
            var users = JsonConvert.DeserializeObject<User>(json);
            return users;
        }

标签: c#apixamarin.formsmobilewebapi

解决方案


事实证明,问题是由任务定义中的 IEnumerable 类型引起的,这是有道理的,因为我试图检索单个实例。

服务方式改为

     public static async Task<User> GetUserById(string id)
        {           
            var json = await client.GetStringAsync($"api/users/{id}");
            var users = JsonConvert.DeserializeObject<User>(json);
            return users;
        }

推荐阅读