xamarin 如何成功地将http请求发送到ASP.NET核心控制器

qyzbxkaa  于 2023-02-20  发布在  .NET
关注(0)|答案(1)|浏览(143)

我已经构建了一个.NET核心服务器,它连接到postgres数据库,但我现在尝试做的是从移动的应用程序向服务器发送请求,以便与服务器一起执行CRUD函数。这样,移动应用程序就可以使用服务器和移动应用程序中设置为相同的模型发送对象请求。然后,服务器将该请求POST到数据库。
这段代码位于移动的应用程序上,为服务器生成baseAddress,另一段代码位于保存方法中,该方法将对象转换为json字符串,并可能将其发送到控制器。

private static readonly HttpClient sharedClient = new()
        {
            BaseAddress = new Uri("http://10.188.144.18:5240/AandEBacklog"),
        };

using StringContent jsonContent = new(JsonSerializer.Serialize(new { note }),
                Encoding.UTF8,
                "application/json");

using HttpResponseMessage response = await sharedClient.PostAsync("MobileResponse", jsonContent);

我知道我需要对服务器中的program.cs文件中的路由进行一些操作

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

我有一个连接到数据库的控制器,但不知道是否可以在该控制器中使用httpRequest,或者是否需要将其发送到另一个控制器,然后由另一个控制器处理

using Microsoft.AspNetCore.Mvc;
namespace delamainServer.Controllers;

[ApiController]
[Route("[controller]")]
public class AandEBacklogController : ControllerBase
{
    //CONNECTING TO DATABASE.
    private readonly DataContext context;

    //var httpRequest = HttpContext.Request;

    public AandEBacklogController(DataContext context)
    {
        this.context = context;
    }

    //post method example to add entry
    [HttpPost]
    public async Task<ActionResult<List<AandEBacklog>>> Addemrgncy(AandEBacklog booking)
    {
        context.AandEBacklogs.Add(booking);
        await context.SaveChangesAsync();

        return Ok(await context.AandEBacklogs.ToListAsync());
    }
}

先谢谢你了

uemypmqf

uemypmqf1#

对于客户端部分:

var client = new HttpClient() { BaseAddress = new Uri("http://10.188.144.18:5240") };
    var content = new StringContent("yourJsonString", Encoding.UTF8, "application/json");
    var response = await client.PostAsync("/AandEBacklog", content);
    var responseString = await response.Content.ReadAsStringAsync();

**EDIT:**让我们设置简单的GET端点:

[ApiController]
[Route("[controller]")]
public class TimeController : ControllerBase
{
    public ActionResult<string> GetCurrentTime() => $"{DateTime.Now}";
}

验证它是否可以从浏览器(例如http://localhost:5000/Time)运行。如果可以运行,请从控制台或Xamarin应用程序尝试客户端:

var client = new HttpClient() { BaseAddress = new Uri("http://localhost:5000") };
var response = await client.GetAsync("/Time");
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);

相关问题