【问题标题】:How to correctly pass a string id to API controller in Xamarin.Forms如何正确地将字符串 id 传递给 Xamarin.Forms 中的 API 控制器
【发布时间】:2021-04-07 11:20:35
【问题描述】:

我正在使用 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/示例。但是,如果我在 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;
        }

【问题讨论】:

  • 首先,这些" 是“引号”,而不是“逗号”。这个, 是一个“逗号”。其次,不清楚为什么不能在移动客户端中使用“/api/Users/Example”。你能发布一些说明问题的代码吗?
  • parsedString.Trim('"'),但还有其他字符不能在路由参数中使用。但在查询中将它们作为编码值提供将始终有效
  • @Jason - 没有意识到我输入的是“逗号”而不是“引号”,我的错。我已经使用服务方法和服务调用编辑了问题。我希望它有助于说明问题?!
  • 不,它没有。 GetUserById("Example") 将导致 url api/users/Example - 这是如何导致问题的?
  • 除非我遗漏了一些非常明显的东西,否则它似乎会导致 URL api/users/“Example”返回“未找到”。我现在没有我的工作机器,我可以在几个小时后再次检查。如果我发现任何东西,我会报告。谢谢

标签: c# api xamarin.forms mobile webapi


【解决方案1】:

事实证明,问题是由任务定义中的 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;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多