【发布时间】:2020-09-20 09:37:01
【问题描述】:
我有一个将 json 发送到我的 api 的 post 方法。
我的端点在邮递员中工作,所以我的问题出在我的 xamarin 发布请求中:
async void RegisterUser(object sender, System.EventArgs e)
{
string URL = "http://blablahblah:51001/register";
HttpClient client = new HttpClient();
var model = new RegisterViewModel
{
Email = EntryEmail.Text,
FirstName = FirstName.Text,
LastName = LastName.Text,
Password = EntryPasswrd.Text
};
var content = JsonConvert.SerializeObject(model);
await client.PostAsync(URL, new StringContent(content));
}
在它命中等待之后 client.PostAsync(URL, new StringContent(content));行,应用程序就停止了。没有错误消息或类似的东西。
有什么想法吗?
编辑:
我的 API 解决方案中的注册方法:
[Route("register")]
[HttpPost]
public async Task<ActionResult> InsertUser([FromBody] RegisterViewModel model)
{
var user = new IdentityUser
{
Email = model.Email,
UserName = model.Email,
SecurityStamp = Guid.NewGuid().ToString()
};
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
var newUser = new User
{
Username = model.Email,
FirstName = model.FirstName,
LastName = model.LastName
};
_dbContext.Users.Add(newUser);
await _dbContext.SaveChangesAsync();
}
return Ok(new { Username = user.UserName });
}
我的视图模型正在传递数据:
public class RegisterViewModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public string Password { get; set; }
}
我已经使用以下建议重写了我的 post 方法,它仍然没有在我的 catch 块中返回任何错误:
public async Task<string> Registered(object details)
{
string URL = "http://blahblah:51001/register";
HttpClient client = new HttpClient();
var model = new RegisterViewModel
{
Email = EntryEmail.Text,
FirstName = FirstName.Text,
LastName = LastName.Text,
Password = EntryPasswrd.Text
};
var content = JsonConvert.SerializeObject(model);
try
{
await client.PostAsync(URL, new StringContent(content));
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return "Registration Successful";
}
【问题讨论】:
-
您确定没有连接问题吗?您可以从设备的浏览器访问您的 API 网址吗?你确定没有例外或超时吗?使用 async void 通常是一个坏主意 - 有很多帖子和讨论关于为什么会这样以及您应该查看的替代方法。
-
能否请您在client.PostAsync周围添加一个try-catch块,看看是否有任何异常?
-
大家好,我已经对我的方法进行了更改,请检查我上面的编辑,感谢您的贡献!
-
@Jason 我在 android 模拟器浏览器中运行了 url,但它似乎不起作用?它说不好的请求?
标签: c# asp.net-web-api xamarin.forms