c# - DynamicRouteValueTransformer 更改值不会产生任何影响

标签 c# asp.net-core asp.net-core-routing

我正在尝试创建一个使用插件进行端点处理的 webapi

我有一个计算 Controller

[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}");
    });
}

我实现了一些可以改变翻译转换器中的值的逻辑

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/计算/房子

启动翻译转换器 值[“ Controller ”]:“计算” 值[“行动”]:“房子”

没有更改结果 Controller 被激活:确定

测试用例2

/api/demo/fake

启动翻译转换器 值[“ Controller ”]:“演示” 值[“action”]:“假”

无更改结果 Controller 未激活:确定

测试用例3

/api/demo/fake

启动翻译转换器 值[“ Controller ”]:“演示” 值[“action”]:“假”

改变 值[“ Controller ”]:“计算” 值[“行动”]:“房子”

结果 Controller 未激活:不正常

测试用例 4

/api/计算/房子

启动翻译转换器 值[“ Controller ”]:“计算” 值[“行动”]:“房子”

改变 值[“ Controller ”]:“演示” 值[“action”]:“假”

结果 Controller 被激活:不正常

我在这里缺少什么?

最佳答案

我已经弄清楚缺少什么了。

显然,值并不是决定 Controller 选择的唯一元素。这在测试用例 4 中得到了展示

所以你可以盲目地采用有效请求的值。

Controller 和操作的值实际上是 Controller 的名称和需要激活的方法。

就我而言,它是 Controller :计算。但作为操作,方法的名称必须是:Get

我仍然觉得有点令人困惑,为什么将名称更改为有效请求的值不会导致相同的行为。

关于c# - DynamicRouteValueTransformer 更改值不会产生任何影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59895395/

相关文章:

c# - Regex.IsMatch 在 C# 中返回两个不同的输出

asp.net-core - 使用 FromBody 的路由不适用于 ASP.NET Core

c# - 传递给 MVC Controller 的 id 总是映射为 0

c# - Entity Framework Core - LINQ 选择导航属性创建无效查询

c# - 检查 SQL 连接字符串是否指定参数

c# - OData 路由返回 404 Not Found

asp.net-core - 为什么声明转换不会减少 cookie 大小?

angular - tsconfig.json 中的 Visual Studio 2017 Typescript baseUrl/paths 无法识别

c# - 在没有 'slash' 的 ASP.NET Core 中路由

c# - 具有可选参数/默认参数值的 ASP.NET5 MVC 6 路由