首页 > 解决方案 > 如何在 Xamarin 的 api 控制器中使用异步方法

问题描述

我对 Xamarin 很陌生,通常在生产中使用它我会执行以下操作:

 // GET: api/Jobs
 public  async Task<string> GetJobs()
 {
     return await db.GetAllJobsAsync();
 }

我的问题是我想返回工程师的所有工作,所以我在我的数据访问层中有这个方法,然后使用我的 api 从它返回 json,但是我如何在我的 Jobs API 控制器中调用以下内容

/// <summary>
/// Get All Jobs Assigned to the work person.
/// </summary>
/// <param name="id"></param>
/// <returns></returns>

public async Task<string> GetAllJobsAsync(int Id)
{
        string json;

        using (FuelCallManagmentEntities _db = new FuelCallManagmentEntities())
        {
            var task = Task.Run(() => _db.Jobs.Where(w => w.EngineerId == Id).ToList());
            List<Job> alljobs = await task;

            json = JsonConvert.SerializeObject(alljobs, Formatting.Indented);
        }

        return json;
}

我的问题也是我是否应该返回 json 肯定不是那么安全,如果使用这种方式,保护密码的最佳方法是什么。

我希望我可以使用 azure,但这必须是我们公司的安全托管解决方案。

当我尝试运行上面的代码时,我也遇到了上述错误。

{"Message":"发生错误。","ExceptionMessage":"'ObjectContent`1' 类型未能序列化内容类型 'application/json; charset=utf-8' 的响应正文。","ExceptionType ":"S

标签: c#.netentity-frameworkxamarinasp.net-web-api2

解决方案


将您的方法重构为:

public async Task<IActionResult> GetAllJobsAsync(int Id)
{
    using (var _db = new FuelCallManagmentEntities())
    {
        var alljobs = await _db.Jobs.Where(w => w.EngineerId == Id).ToListAsync();

        return Ok(alljobs);
    }
}

关于第二个问题;这是一个不同的问题,这在 SO 中是题外话......

据我所知,今天的标准是将密码保存在一种Hash-Salt机制中。 该视频以非常好的方式解释了这种机制。

顺便说一句,您永远不应该返回密码或有机制来公开您存储的密码。


推荐阅读