【发布时间】: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")将导致 urlapi/users/Example- 这是如何导致问题的? -
除非我遗漏了一些非常明显的东西,否则它似乎会导致 URL api/users/“Example”返回“未找到”。我现在没有我的工作机器,我可以在几个小时后再次检查。如果我发现任何东西,我会报告。谢谢
标签: c# api xamarin.forms mobile webapi