You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin:如何在API控制器中调用查询工程师任务的异步方法

解决Xamarin API控制器调用指定工程师任务方法的问题

嗨,作为Xamarin新手就能在生产环境实操已经很厉害了!针对你的需求,咱们一步步来调整你的API控制器代码,实现返回指定工程师任务的JSON数据:

第一步:明确数据层方法的完整签名

你提到数据层已经实现了查询分配给工作人员任务的异步方法,首先得确定它的完整参数和返回值。通常这类方法会接收一个标识工程师的参数(比如ID、工号),返回任务列表的实体集合或者JSON字符串。假设方法签名大概是这样:

/// <summary> 
/// Get All Jobs Assigned to the work person. 
/// </summary> 
/// <param name="workerId">ID of the worker to get jobs for</param>
/// <returns>List of jobs assigned to the worker</returns>
public async Task<List<Job>> GetJobsByWorkerAsync(int workerId);

如果你的数据层方法返回的是JSON字符串而非实体集合,后面也会给你对应的处理方式。

第二步:在Jobs API控制器中添加新的接口方法

接下来在你的JobsController里新增一个GET接口,用来接收工程师标识参数,调用数据层方法并返回JSON:

情况1:数据层返回实体集合(推荐)

这种方式更规范,ASP.NET Core会自动帮你把实体序列化为JSON,还能灵活处理HTTP状态码:

// GET: api/Jobs/ByWorker/{workerId}
[HttpGet("ByWorker/{workerId}")]
public async Task<IActionResult> GetJobsByWorker(int workerId)
{
    try
    {
        // 调用数据层的异步方法
        var workerJobs = await db.GetJobsByWorkerAsync(workerId);
        
        // 检查是否找到任务
        if (workerJobs == null || !workerJobs.Any())
        {
            return NotFound($"没有找到ID为{workerId}的工程师的任务");
        }
        
        // 返回200状态码和序列化后的JSON数据
        return Ok(workerJobs);
    }
    catch (Exception ex)
    {
        // 生产环境建议记录日志,避免返回敏感异常信息
        // _logger.LogError(ex, "获取工程师任务时出错");
        return StatusCode(StatusCodes.Status500InternalServerError, "获取任务数据失败,请稍后重试");
    }
}

情况2:数据层直接返回JSON字符串

如果你的数据层方法已经返回了JSON格式的字符串,直接返回内容并指定媒体类型即可:

// GET: api/Jobs/ByWorker/{workerId}
[HttpGet("ByWorker/{workerId}")]
public async Task<IActionResult> GetJobsByWorker(int workerId)
{
    try
    {
        var jsonJobs = await db.GetJobsByWorkerAsync(workerId);
        
        if (string.IsNullOrEmpty(jsonJobs))
        {
            return NotFound($"没有找到ID为{workerId}的工程师的任务");
        }
        
        // 返回JSON字符串,指定Content-Type为application/json
        return Content(jsonJobs, "application/json");
    }
    catch (Exception ex)
    {
        return StatusCode(StatusCodes.Status500InternalServerError, "获取任务数据失败,请稍后重试");
    }
}

第三步:调整参数传递方式(可选)

如果你的前端更习惯通过查询字符串传递工程师ID(比如api/Jobs/ByWorker?workerId=123),可以修改路由和参数绑定方式:

// GET: api/Jobs/ByWorker?workerId=123
[HttpGet("ByWorker")]
public async Task<IActionResult> GetJobsByWorker([FromQuery] int workerId)
{
    // 内部逻辑和上面一致
}

这样调整后,客户端就能通过对应的GET请求获取指定工程师的任务JSON数据啦!

内容的提问来源于stack exchange,提问作者David B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:29:16