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

添加路由前缀时无法连接Web服务器的技术咨询

问题与解决:ASP.NET Core添加路由前缀后连接失败

问题情况

当客户端和服务器都使用http://127.0.0.1:8003时能正常通信,但添加路由前缀/service(目标地址变为http://127.0.0.1:8003/service)后,出现连接错误:

无法建立连接,因为目标计算机主动拒绝了连接。(127.0.0.1:8003)

用户尝试通过UsePathBase配置路由前缀,以下是相关代码示例:

原始正常工作代码

客户端

var restClient = new RestClient("http://127.0.0.1:8003");
var request = new RestRequest("do_stuff");
request.AddJsonBody(JsonConvert.SerializeObject(new MyInfo {}));
var res = await restClient.PostAsync(request);

服务器

var builder = Microsoft.AspNetCore.Builder.WebApplication.CreateBuilder();
var app = builder.Build();
    
app.MapPost("do_stuff", ([FromBody] MyInfo args) =>
{
    return Results.Ok();
});
    
appTask = app.RunAsync("http://127.0.0.1:8003");

使用UsePathBase后出现问题的代码

客户端

var restClient = new RestClient("http://127.0.0.1:8003/service");
var request = new RestRequest("do_stuff");

服务器

var builder = Microsoft.AspNetCore.Builder.WebApplication.CreateBuilder();
var app = builder.Build();
app.UsePathBase("/service");
app.UseRouting();
    
app.MapPost("do_stuff", ([FromBody] MyInfo args) =>
{
    return Results.Ok();
});
    
appTask = app.RunAsync("http://127.0.0.1:8003/service");

错误原因与修正方案

错误出在服务器的RunAsync调用上:RunAsync的参数是服务器监听的网络端点(仅IP+端口),不能包含路径前缀。/service是应用级的路由前缀,应该由UsePathBase处理,而不是加到监听地址里。

修正后的服务器代码

var builder = Microsoft.AspNetCore.Builder.WebApplication.CreateBuilder();
var app = builder.Build();

// 配置应用的路由前缀
app.UsePathBase("/service");
// 启用路由中间件,确保路径前缀生效
app.UseRouting();

// 接口映射保持不变,请求会自动匹配 /service/do_stuff
app.MapPost("do_stuff", ([FromBody] MyInfo args) =>
{
    return Results.Ok();
});

// 监听正确的端点,仅指定IP和端口
appTask = app.RunAsync("http://127.0.0.1:8003");

客户端代码无需修改

客户端当前的写法是正确的,请求的完整地址为http://127.0.0.1:8003/service/do_stuff,服务器通过UsePathBase识别前缀后,会正确路由到do_stuff接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:42:51