- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我花了一天时间在这上面,我真的认为这会是一件微不足道的事情。
围绕 HTTP 绑定(bind)“Route”参数、相关“Run”方法签名以及底层 Web API 路由机制文档,大约有十几个选项。我已经尝试了每一种,并且每一种似乎都会引发不同的错误。顺便说一句,这种反复试验特别令人沮丧且耗时。
https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook
函数绑定(bind)允许您在每个函数配置文件中定义“路由”字符串,该文件定义该函数的入口点。它的有效工作方式与 ASP.NET 中的“Route”注释的工作方式相同(这对我来说是新的)。因此,Azure Function 文档链接到约束文档以供高级使用。
我们的用例并不高级,我们希望我们的函数像下面这样工作:
处理类似以下路线的内容:
"route" : "/books/{bookName}"
它映射到一个带有 Run() 签名的函数,如下所示:
Run(HttpRequestMessage req, string bookName, TraceWriter log)
如果没有 bookName,我们的函数将返回所有书籍的数组。如果有书名,它将返回该书的详细信息。标准 API 的东西。
根据“约束”文档,我们必须对 bookName 进行调整,使其成为可选的 URI 参数,并且我们有几个选项。以下是提供的两个示例/选项:
public class BooksController : ApiController
{
[Route("api/books/locale/{lcid:int?}")]
public IEnumerable<Book> GetBooksByLocale(int lcid = 1033) { ... }
}
public class BooksController : ApiController
{
[Route("api/books/locale/{lcid:int=1033}")]
public IEnumerable<Book> GetBooksByLocale(int lcid) { ... }
}
目前,上述两个选项都不适用于函数。绑定(bind)不允许 function.json 中使用等号,并且 Run() 方法中的任何可选参数都需要是“最后”参数,并且我们无法控制 Run() 的顺序参数。即使我们可以更改它们,我们也不想这样做,因为将 TraceWriter log 作为最后一个参数是我们希望遵循的明智约定。
现在,Azure Functions 文档提供了一个可选参数示例,该示例似乎非常简单,但以某种方式设法避开了上面的特定用例。
这是来自 function.json 的路由:
"route": "products/{category:alpha}/{id:int?}"
这是方法签名:
Run(HttpRequestMessage request, string category, int? id, TraceWriter log)
所以,这里的区别在于,它们标记为可选的参数具体是一个 int,它是一个可以为 null 的类型。如果 URL 不包含 null int,azure 函数运行时显然会传递 null int,从而绕过将“id”作为方法的可选参数的要求。
如果您对字符串参数尝试相同的技巧,您会得到以下结果:
error CS0453: The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'Nullable'
是否有合理的解决方案来在 Azure Functions 中实现可选字符串参数?
如果是这样,请提供有关教程的提示。如果没有,请在教程中明确指出此限制。
最佳答案
这适用于像 int?
这样的结构,但不适用于像 string
这样的类。我在这里提交了一个问题:https://github.com/Azure/azure-webjobs-sdk-extensions/issues/224 .
在这个问题得到解决之前,您最好的选择可能是使用路由模板,例如:"route": "books/{bookName?}"
,但不使用bookName
作为函数中的参数:Run(HttpRequestMessage req, TraceWriter log)
在我的简短测试中,这将为您提供正确的路由匹配,但您必须自己对 req
参数进行一些 URI 解析才能检查书名。
更新:此问题已得到修复,现在应该可以按预期工作。
关于c# - 如何使用 Azure Function HTTP 绑定(bind)执行 REST API 可选字符串 URI 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43748806/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!