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

同一解决方案内如何调用Controller方法?无需完整URL及自定义传参

同一解决方案内调用Controller方法的可行方案

1. 直接调用MediatR命令(最优选择)

你的Controller方法核心是调用_mediator.SendExternal,如果调用方和Controller在同一解决方案且能获取到IMediator实例,完全可以跳过Controller直接执行命令:

var command = new AcceptBidDeliveryDateOutOfScheduleBySupplierCommand
{
    // 填充自定义参数
};

var cancellationToken = CancellationToken.None;
_currentUserContext.UserLogin = nameof(AcceptBidDeliveryDateOutOfSchedule);

var response = await _mediator.SendExternal<
    AcceptBidDeliveryDateOutOfScheduleBySupplierCommand,
    AcceptBidDeliveryDateOutOfScheduleBySupplierCommandResponse>
    (command, cancellationToken);

这种方式无需HTTP请求,性能最高,也避免了参数序列化的麻烦。

2. 使用本地测试主机+HttpClient(需模拟HTTP管道时用)

如果必须通过PostAsync调用(比如需要走完整中间件流程),可以用WebApplicationFactory创建本地HttpClient,无需完整外部URL:

示例代码:

// 初始化测试主机
var factory = new WebApplicationFactory<Program>();
var client = factory.CreateClient();

// 构造命令参数
var command = new AcceptBidDeliveryDateOutOfScheduleBySupplierCommand
{
    // 填充参数内容
};

// 序列化参数为JSON请求体
var jsonContent = new StringContent(
    JsonSerializer.Serialize(command),
    Encoding.UTF8,
    "application/json");

// 发送POST请求,使用相对路由
var response = await client.PostAsync(
    $"/{nameof(YourController)}/{nameof(AcceptBidDeliveryDateOutOfSchedule)}",
    jsonContent);

// 解析响应结果
var responseJson = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<AcceptBidDeliveryDateOutOfScheduleBySupplierCommandResponse>(responseJson);

注意替换YourController为实际的Controller类名,若Controller有路由前缀需一并添加。

3. 直接实例化Controller调用(不推荐)

若一定要直接调用Controller方法,需手动注入其依赖(如_currentUserContext、_mediator):

var controller = new YourController(_currentUserContext, _mediator);
var command = new AcceptBidDeliveryDateOutOfScheduleBySupplierCommand
{
    // 填充参数
};

var response = await controller.AcceptBidDeliveryDateOutOfSchedule(command, CancellationToken.None);

此方式不推荐,因为Controller设计用于处理HTTP请求,直接实例化可能跳过部分初始化逻辑,且依赖管理容易出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:31:01