Paresh Mayani 我想要调用一个已有的API,但想提供一个针对客户端特定的URL。 例如: http://<baseaddress>/controller/action/id 这应该实际调用的是: http://<baseaddress>/eapi/1.0/Diff-Controller/action/id 我尝试过使用DynamicRouteValueTransformer,但是没有成功。
axtavt 在ASP.NET中,你可以通过实现自定义路由约束或使用中间件来拦截传入的请求,并根据特定条件将它们重定向到不同的API来实现条件路由。 以下是一个使用中间件的例子: using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using System; using System.Threading.Tasks; public class CustomApiMiddleware { private readonly RequestDelegate _next; public CustomApiMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { // 检查传入的请求,并基于特定条件修改URL if (context.Request.Path.StartsWithSegments("/controller")) { string newPath = context.Request.Path.Value.Replace("/controller", "/eapi/1.0/Diff-Controller"); context.Request.Path = newPath; } // 调用管道中的下一个中间件 await _next(context); } } public static class CustomApiMiddlewareExtensions { public static IApplicationBuilder UseCustomApiMiddleware(this IApplicationBuilder builder) { return builder.UseMiddleware<CustomApiMiddleware>(); } }
Sweeper 在控制器上添加 [Route] 特性: [Route("eapi/1.0/Diff-Controller/[action]")] public class OtherController : Controller { } 或者,如果只为单个端点设置路由,则将 [Route] 特性添加到方法上: public class OtherController : Controller { [Route("eapi/1.0/Diff-Controller/myaction")] public async Task<IActionResult> MyAction() { // 方法内容 } }