如何正确地将字符串 id 传递给 Xamarin.Forms 中的 API 控制器

Posted

技术标签:

【中文标题】如何正确地将字符串 id 传递给 Xamarin.Forms 中的 API 控制器【英文标题】:How to correctly pass a string id to API controller in Xamarin.Forms 【发布时间】: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”返回“未找到”。我现在没有我的工作机器,我可以在几个小时后再次检查。如果我发现任何东西,我会报告。谢谢 【参考方案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;
        

【讨论】:

以上是关于如何正确地将字符串 id 传递给 Xamarin.Forms 中的 API 控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将文本文件传递给 NSFileManager

如何正确地将 RelayState 传递给 Okta 的 ACS URL?

如何正确地将 C 数组传递给 C#?

如何正确地将页面属性传递给局部视图?

在 C# 中如何正确地将 int 数组传递给函数

如何正确地将 numpy 数组传递给 Cython 函数?