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

如何用jQuery编写ASP.NET Core API的GET请求按外键ID获取消息

按特定外键ID获取消息的ASP.NET Core API + jQuery实现

当然可以实现这个需求!我们分两步来搞定:先调整ASP.NET Core API控制器,让它能接收contactId并筛选数据,再修改前端的jQuery代码把参数传过去。

第一步:修改ASP.NET Core API控制器

你需要在MessagesController里添加(或修改)一个GET方法,专门用来根据contactId筛选消息。这里有两种常见的传参方式,选哪种都可以:

方式1:使用查询参数(比如api/Messages?contactId=123)

[ApiController]
[Route("api/[controller]")]
public class MessagesController : ControllerBase
{
    private readonly YourDbContext _dbContext;

    // 构造函数注入数据库上下文
    public MessagesController(YourDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    // GET api/Messages?contactId=xxx
    [HttpGet]
    public async Task<ActionResult<IEnumerable<Message>>> GetMessagesByContactId(int contactId)
    {
        // 用Linq的Where筛选出对应ContactId的消息
        var filteredMessages = await _dbContext.Messages
            .Where(r => r.ContactId == contactId)
            .ToListAsync();

        // 如果没有找到对应消息,返回404
        if (!filteredMessages.Any())
        {
            return NotFound("没有找到该联系人的消息");
        }

        return filteredMessages;
    }
}

方式2:使用路由参数(更RESTful,比如api/Messages/123)

如果更喜欢把contactId放在URL路径里,可以这样写:

// GET api/Messages/xxx
[HttpGet("{contactId}")]
public async Task<ActionResult<IEnumerable<Message>>> GetMessagesByContactId(int contactId)
{
    var filteredMessages = await _dbContext.Messages
        .Where(r => r.ContactId == contactId)
        .ToListAsync();

    if (!filteredMessages.Any())
    {
        return NotFound("没有找到该联系人的消息");
    }

    return filteredMessages;
}

第二步:修改前端jQuery代码

接下来要调整你的showMessagesHistory函数,把contactid参数传给API,并且优化一下逻辑(比如清空旧消息、添加错误处理):

function showMessagesHistory(contactid) {
    // 建议把$(document).ready放在函数外面,不过如果是动态触发这个函数,这样也能用
    $(document).ready(function() {
        // 根据你选的API传参方式,修改URL:
        // 方式1(查询参数):`api/Messages?contactId=${contactid}`
        // 方式2(路由参数):`api/Messages/${contactid}`
        $.getJSON(`api/Messages?contactId=${contactid}`, (data) => {
            // 先清空消息容器,避免重复加载旧消息
            $('#messageDiv').empty();
            
            $.each(data, (key, val) => {
                const messageText = val.body;
                $(`<p class="chat-message">${messageText}</p>`)
                    .appendTo($('#messageDiv'));
            });
        })
        // 添加错误处理,请求失败时给用户反馈
        .fail(function(jqXHR, textStatus, errorThrown) {
            console.error('加载消息出错:', errorThrown);
            $('#messageDiv').empty().append('<p class="chat-error">加载消息失败,请稍后重试</p>');
        });
    });
}

这样一来,当你调用showMessagesHistory(某个contactId)时,前端就会向API请求对应联系人的消息,API会用Linq筛选后返回数据,完美实现你要的Where(r => r.ContactId == contactId)逻辑!

内容的提问来源于stack exchange,提问作者Daniel Žeimo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:39:53