如何正确地将字符串 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 控制器的主要内容,如果未能解决你的问题,请参考以下文章