具有输出绑定到队列的 Http 触发器功能
Http trigger function with output binding to queue
我在 .Net5 中有一个 http 触发函数,独立函数。
我很难让输出绑定为此 https 函数工作。
https 函数检索对象列表。这些对象需要作为单独的消息添加到队列中。
[FunctionName("TestQueueOutput")]
[return: Queue("myqueue-items", Connection = "AzureWebJobsStorage")]
public async Task<HttpResponseData> RunAsync([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
FunctionContext context)
{
HttpResponseData okResponse = null;
okResponse = req.CreateResponse(System.Net.HttpStatusCode.OK);
// List of Objects
var _list= await _repo.Get();
await okResponse.WriteAsJsonAsync(_list);
return okResponse;
}
当我运行函数时,http响应可以看到列表,但在Azure中定义的队列中什么也看不到。
我进一步按照以下文章将输出绑定添加到 Http 触发器。
当我为隔离进程添加多响应 class 时,QueueOutput 的输出绑定,该函数为其提供红色波浪线。找不到正确的 nugget 包来修复它。
我花了无数个小时将列表项作为消息添加到队列中。
我做的对吗?任何指导将不胜感激
更新 #1:当我添加 MultiResponse
class 时,我不知道如何解决 QueueOutput
问题如下图所示:
有几件事你需要看一下。首先,您希望 return HttpResponseData
,但也有 return
绑定设置。而且,正如 HttpResponseData
所期望的那样,您正在 returning HttpResponse
。但是 returns
绑定试图将其转换为队列消息。而且消息信息好像是写到response body里了,不是应该的样子
根据您链接的文章,尝试以下操作:
- 将 class 添加到您的项目中,将其命名为
MultiRepsonse
- 实施
MultiResponse
class 如下所示
- 在您的函数中使用
MultiResponse
class,如下所示
这实现了 MultiResponse,告诉 Function 使用它并使您能够 return a HttpResonse
同时将消息写入队列。当心:下面是浏览器编写的未经验证的代码。
MultiRespsonse.cs
public class MultiResponse
{
[QueueOutput("myqueue-items",Connection = "AzureWebJobsStorage")]
public string[] Messages { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
TestQueueOutput.cs
[FunctionName("TestQueueOutput")]
public async Task<MultiResponse> RunAsync(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
FunctionContext context)
{
var response = new MultiResponse();
response.HttpResponse = req.CreateResponse(HttpStatusCode.OK);
var _list = await _repo.Get();
response.Messages = new string[_list.Count];
foreach (var item in _list)
{
// Add the item to the list
}
return response;
}
我在 .Net5 中有一个 http 触发函数,独立函数。
我很难让输出绑定为此 https 函数工作。
https 函数检索对象列表。这些对象需要作为单独的消息添加到队列中。
[FunctionName("TestQueueOutput")]
[return: Queue("myqueue-items", Connection = "AzureWebJobsStorage")]
public async Task<HttpResponseData> RunAsync([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
FunctionContext context)
{
HttpResponseData okResponse = null;
okResponse = req.CreateResponse(System.Net.HttpStatusCode.OK);
// List of Objects
var _list= await _repo.Get();
await okResponse.WriteAsJsonAsync(_list);
return okResponse;
}
当我运行函数时,http响应可以看到列表,但在Azure中定义的队列中什么也看不到。
我进一步按照以下文章将输出绑定添加到 Http 触发器。
当我为隔离进程添加多响应 class 时,QueueOutput 的输出绑定,该函数为其提供红色波浪线。找不到正确的 nugget 包来修复它。
我花了无数个小时将列表项作为消息添加到队列中。
我做的对吗?任何指导将不胜感激
更新 #1:当我添加 MultiResponse
class 时,我不知道如何解决 QueueOutput
问题如下图所示:
有几件事你需要看一下。首先,您希望 return HttpResponseData
,但也有 return
绑定设置。而且,正如 HttpResponseData
所期望的那样,您正在 returning HttpResponse
。但是 returns
绑定试图将其转换为队列消息。而且消息信息好像是写到response body里了,不是应该的样子
根据您链接的文章,尝试以下操作:
- 将 class 添加到您的项目中,将其命名为
MultiRepsonse
- 实施
MultiResponse
class 如下所示 - 在您的函数中使用
MultiResponse
class,如下所示
这实现了 MultiResponse,告诉 Function 使用它并使您能够 return a HttpResonse
同时将消息写入队列。当心:下面是浏览器编写的未经验证的代码。
MultiRespsonse.cs
public class MultiResponse
{
[QueueOutput("myqueue-items",Connection = "AzureWebJobsStorage")]
public string[] Messages { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
TestQueueOutput.cs
[FunctionName("TestQueueOutput")]
public async Task<MultiResponse> RunAsync(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
FunctionContext context)
{
var response = new MultiResponse();
response.HttpResponse = req.CreateResponse(HttpStatusCode.OK);
var _list = await _repo.Get();
response.Messages = new string[_list.Count];
foreach (var item in _list)
{
// Add the item to the list
}
return response;
}