【发布时间】:2020-05-10 17:15:22
【问题描述】:
我正在尝试创建一个使用插件进行端点处理的 webapi
我有一个计算控制器
[Route("api/[controller]")]
public class CalculateController : Controller
{
[HttpGet("{functionName}")]
public IActionResult Get(string functionName)
{
/// some logic here
}
}
这应该响应 /api/calculate/house
我在启动中添加了一个 TranslationTransformer,我看到它被激活了
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//hidden for abbreviate
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapDynamicControllerRoute<TranslationTransformer>("api/{controller}/{**action}");
});
}
我实现了一些可以改变translationtransformer中的值的逻辑
public override async ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)
{
RouteConfig dynamicRoute = GetDynamicRoute(values);
if (dynamicRoute != null)
{
values["controller"] = dynamicRoute.Controller;
values["action"] = dynamicRoute.Action;
}
return values;
}
测试结果:
测试用例 1
/api/calculate/房子
启动 TranslationTransformer 值[“控制器”]:“计算” values["action"] : "房子"
没有更改结果控制器被激活:OK
测试用例2
/api/demo/假的
启动 TranslationTransformer 值[“控制器”]:“演示” 值[“动作”]:“假”
no change result controller 没有被激活:OK
testcase3
/api/demo/假的
启动 TranslationTransformer 值[“控制器”]:“演示” 值[“动作”]:“假”
改变 值[“控制器”]:“计算” values["action"] : "房子"
结果控制器未激活:不好
测试用例 4
/api/calculate/房子
启动 TranslationTransformer 值[“控制器”]:“计算” values["action"] : "房子"
改变 值[“控制器”]:“演示” 值[“动作”]:“假”
结果控制器被激活:不行
我在这里错过了什么?
【问题讨论】:
标签: c# asp.net-core asp.net-core-routing