为啥我不能从我的 Xamarin Froms 应用程序发布到我的 .net 核心 web api
Posted
技术标签:
【中文标题】为啥我不能从我的 Xamarin Froms 应用程序发布到我的 .net 核心 web api【英文标题】:Why can't I post from my Xamarin Frorms app to my .net core web api为什么我不能从我的 Xamarin Froms 应用程序发布到我的 .net 核心 web api 【发布时间】: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块,看看是否有任何异常? 请分享minimal reproducible example。 大家好,我已经对我的方法进行了更改,请检查我上面的编辑,感谢您的贡献! @Jason 我在 android 模拟器浏览器中运行了 url,但它似乎不起作用?它说不好的请求? 【参考方案1】:请先使用 POSTMAN 等 REST 测试工具测试 Web Api,以验证它是否适用于您的 JSON 数据。
如果你的webapi没有问题,请看下面的代码,我可以成功post数据到asp.net core webapi,并返回值。
private async void btnpost_Clicked(object sender, EventArgs e)
ContactModel cm = new ContactModel() ID=1,Name="cherry",Age=12 ;
var httpClient = new HttpClient();
var content = JsonConvert.SerializeObject(cm);
HttpContent httpContent = new StringContent(content, Encoding.UTF8);
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var uri = new Uri("http://xxx.xx.xx.xx:8088/api/Contact");
HttpResponseMessage response = await httpClient.PostAsync(uri, httpContent);
if (response.IsSuccessStatusCode)
var data = await response.Content.ReadAsStringAsync();
string ss = data;
请注意:在 Mainfeast.xml 中添加 android:usesCleartextTraffic="true",因为从 Android 9(API 级别 28)开始,明文支持默认禁用。如果不是,您可能会遇到 Cleartext HTTP traffic not allowed 错误。
【讨论】:
感谢您,虽然这并没有解决整个问题,但我已将您的一些方法纳入我的帖子请求中。【参考方案2】:所以经过 2 天的谷歌搜索后,我找到了解决方案:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti#overview
现在我可以从我的 xamarin 表单项目发布到我的 api !!!
感谢大家的意见
【讨论】:
@很高兴听到您自己解决了您的问题,请记得将您的回复标记为答案,有利于其他人找到此答案,谢谢。 抱歉!我刚刚标记了它。感谢您在这方面的帮助!以上是关于为啥我不能从我的 Xamarin Froms 应用程序发布到我的 .net 核心 web api的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Xamarin.Android 项目不能在启用 Proguard 的情况下构建:“java.exe”退出代码 1
为啥我不能从我的 UICollectionView 中删除图像?