英文:
F# ASP.NET Core Minimal Web API - Why does the generated endpoint ignore parameter names when not supplied a lambda?
问题
以下是翻译的代码部分:
我从标准的 F# 模板创建了一个 .NET Core Web API,并添加了以下代码:
当我访问 `addPretty` 端点时,我可以使用期望的参数名称提供参数:
`https://localhost:7129/addPretty?x=1&y=2`
然而,要访问 `addUgly` 端点,我必须提供这些参数:
`https://localhost:7129/addUgly?delegateArg0=3&delegateArg1=4`
**是否有一种方法可以让生成的端点使用期望的参数名称,而不使用 Lambda 表达式之类的不必要的样板代码(如创建控制器)?**
我检查了 `add` 和 `(fun x y -> add x y)` 是否具有不同结构的类型定义,但它们都有带有参数名 `x` 和 `y` 的 `Invoke` 方法,所以我不知道为什么在一个情况下会丢失参数名而在另一个情况下不会。
英文:
I created a .NET core web API from the standard F# template and added these lines:
let add x y = x + y
app.MapGet("addUgly", new Func<_,_,_>(add))
app.MapGet("addPretty", new Func<_,_,_>(fun x y -> add x y))
When I access the addPretty
endpoint, I can supply parameters with the desired names:
https://localhost:7129/addPretty?x=1&y=2
However, in order to access the addUgly
endpoint, I must supply these parameters:
https://localhost:7129/addUgly?delegateArg0=3&delegateArg1=4
Is there a way to have the generated endpoint use the desired parameter names without using a lambda? (or other constructs that involve unnecessary boilerplate, like creating a controller)?
I checked whether add
and (fun x y -> add x y)
had differently structured type definitions, but they both have Invoke
methods with parameters named x
and y
, so I don't know why those names get lost in one case but not the other.
答案1
得分: 4
有没有一种方法可以让生成的端点使用所需的参数名称而不使用 lambda 表达式?
我认为答案是目前无法做到。这似乎是 F# 编译器中的一个未解决问题。请参阅语言建议:在从函数构造委托时使用相同的参数名称。
英文:
> Is there a way to have the generated endpoint use the desired parameter names without using a lambda?
I think the answer is No for now. This appears to an open issue in the F# compiler. See language suggestion: Use same parameters names when constructing a delegate from a function.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论