如何用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
相关产品推荐
相关产品推荐

