【发布时间】:2021-06-11 10:56:36
【问题描述】:
我正在开发一个 .NET 应用程序,用户可以在其中填写请求(表单)。一旦用户点击“提交”。目标是将 POST 请求发送到函数应用(由 PowerShell 驱动)。如果 post 请求成功,它将返回请求的 id。
我想使用此 ID 来查询发送到函数应用的请求 (GET) 的状态。一旦用户点击提交,它应该自动将他们重定向到详细信息页面,在那里他们可以查看他们的请求状态。
这是我要将请求路由到的控制器:
namespace AzDeployManager.Web.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class DeploymentController : ControllerBase
{
public string ReceiveRequest { get; set; }
public string CheckRequest { get; set; }
public DeploymentController(IOptions<AppSettings> settings)
{
this.ReceiveRequest = settings.Value.AzReceiveRequest;
this.CheckRequest = settings.Value.AzCheckRequest;
}
// POST: api/ReceiveRequest
[HttpPost]
[Route("sendrequest")]
public async Task<IActionResult> OnPostAsync([FromBody] Deployment deployment)
{
using var http = new HttpClient();
var data = new Deployment
{
};
//var content = new StringContent(JsonConvert.SerializeObject(deployment));
var content = new StringContent(JsonConvert.SerializeObject(data));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var request = http.PostAsync(ReceiveRequest, content);
var response = await request.Result.Content.ReadAsStringAsync();
return Ok(response);
}
}
}
在控制器中显示的 http 帖子中,我可以通过调试查看数据。我现在在根据需要自定义有效负载时遇到问题:
{
"data": {
"name1": "val1",
"name2": "val2"
},
"name3": "val3"
}
任何指导都会在这里有所帮助。
【问题讨论】:
-
您的 Azure 函数如何调用?你用的是哪个触发器?
-
Azure 函数使用 http 触发器(post),一旦请求进入,它会将请求定向到相应的队列,只要其接受的有效负载主体。
-
如果要等待响应,不需要使用 Azure 功能。如果您只是通过 azure 函数在 db 中添加数据并希望等待响应,那么为什么不从应用程序本身保存数据呢?如果您没有任何选择,那么您可以使用 httpclient (c-sharpcorner.com/article/…) 调用您的函数,但您无法以这种方式获取响应。一种选择是使用 Thread.Sleep(3000) 等待 2-3 秒,然后从 db 中获取最后一条记录,但您永远不知道函数中是否存在错误。
-
相关函数应用处理所有数据处理。向其发送请求后,它将将该请求添加到 azure 存储表中。从 dotnet 的角度来看,我只是希望能够向这个函数应用发送有效负载请求 > 获取请求 Id 并使用这个请求 Id 在详细信息页面中获取请求的详细信息。
-
然后查看我在上面评论中粘贴的链接。您可以使用 httpclient 来调用您的 azure 函数。
标签: asp.net-mvc asp.net-core asp.net-mvc-3 asp.net-web-api