Asp.net mvc 使用ajax.NET将Get和POST请求发送到Azure函数应用程序

Asp.net mvc 使用ajax.NET将Get和POST请求发送到Azure函数应用程序,asp.net-mvc,asp.net-core,asp.net-mvc-3,asp.net-web-api,Asp.net Mvc,Asp.net Core,Asp.net Mvc 3,Asp.net Web Api,我正在开发一个.NET应用程序,用户可以在其中填写请求(表单)。一旦用户单击“提交”。目标是向功能应用程序(由PowerShell供电)发送POST请求。如果post请求成功,它将返回请求的id 我想使用此Id查询发送到功能应用程序的请求(GET)的状态。一旦用户点击submit,它会自动将他们重定向到details页面,在那里他们可以查看他们的请求状态 这是我要将请求路由到的控制器: namespace AzDeployManager.Web.Controllers { [Route(

我正在开发一个.NET应用程序,用户可以在其中填写请求(表单)。一旦用户单击“提交”。目标是向功能应用程序(由PowerShell供电)发送POST请求。如果post请求成功,它将返回请求的id

我想使用此Id查询发送到功能应用程序的请求(GET)的状态。一旦用户点击submit,它会自动将他们重定向到details页面,在那里他们可以查看他们的请求状态

这是我要将请求路由到的控制器:

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

这里的任何指导都会很有帮助。

您可以使用jQuery将表单的键值对序列化为数组,然后将其解析为json对象

<script>
    function getdata() {
        var paramArray = $('#submitreq').serializeArray();

        var body = {};
        $(paramArray).each(function () {
            //here 
            if (this.name.indexOf('\.') > 0) {
                body[this.name.split('\.')[1]] = this.value;
            } else {
                body[this.name] = this.value;
            }
        });
        
        body['RequestNumber'] = parseInt(body['RequestNumber'])
        
        $.ajax({
            type: "POST",
            url: "/api/sendrequest",
            dataType: "json",
            data: JSON.stringify(body),
            contentType: "application/json; charset=utf-8",
            success: function (response) {
                console.log("Success: " + response.RequestNumber);
            },
            error: function (req, status, error) {
                console.log("Error occured: " + status + "" + req.responseText);
            }
        });
    }
</script>

函数getdata(){
var paramArray=$('#submitreq').serializeArray();
var body={};
$(参数数组)。每个(函数(){
//这里
if(this.name.indexOf('\.')>0){
body[this.name.split('\.)[1]]=this.value;
}否则{
body[this.name]=this.value;
}
});
body['RequestNumber']=parseInt(body['RequestNumber'])
$.ajax({
类型:“POST”,
url:“/api/sendrequest”,
数据类型:“json”,
数据:JSON.stringify(body),
contentType:“应用程序/json;字符集=utf-8”,
成功:功能(响应){
log(“成功:+response.RequestNumber”);
},
错误:功能(请求、状态、错误){
console.log(“发生错误:“+status+”“+req.responseText”);
}
});
}
由于字段集设置为禁用,因此不会自动序列化,因此可以在字段集外添加隐藏的输入框

<form id="submitreq" method="post">
  <div asp-validation-summary="ModelOnly" class="text-danger"></div>

  <input type="hidden" asp-for="Deployment.RequestNumber" class="form-control" />

<!--...-->
  <input type="button" name="name" value="submit" onclick="getdata()" />
</form>


Azure函数如何调用?您使用的是哪个触发器?Azure函数使用http触发器(post),一旦请求传入,它会将请求定向到其相应的队列,只要它是接受的有效负载正文。如果要等待响应,则不需要使用Azure函数。如果您只是通过azure函数在db中添加数据,并希望等待响应,那么为什么不保存应用程序本身的数据?如果您没有任何选择,那么您可以使用httpclient()调用您的函数,但是您无法以这种方式获得响应。一个选项是使用Thread.Sleep(3000)等待2-3秒,然后从db中获取最后一条记录,但您永远不知道函数中是否有错误。所讨论的函数应用程序处理所有数据处理。向其发送请求后,它会将该请求添加到azure存储表中。从dotnet的角度来看,我只希望能够将有效负载请求发送到此函数app>获取请求Id,并使用此请求Id在详细信息页面中获取请求的详细信息。然后查看我在上述注释中粘贴的链接。您可以使用httpclient调用azure函数。我可以继续并将表单路由到api。它实际上是“api/Deployment/sendrequest”。调试后,我的控制器(根据gif)看起来并没有任何值,它都是空的。这里有什么指导吗?序列化过程中有问题吗?在序列化捕获(序列化字符串)后,您可以共享它吗?请参阅-。我相信可能是我的create.cshtml.cs文件导致了这个问题。我想将所有GET和POST请求路由到控制器,以便于重用。@实际上,这不是视图中的jsonarray,运行
$('#submitreq').serializeArray()
。访问时无法显示图像。你能再分吗?
<form id="submitreq" method="post">
  <div asp-validation-summary="ModelOnly" class="text-danger"></div>

  <input type="hidden" asp-for="Deployment.RequestNumber" class="form-control" />

<!--...-->
  <input type="button" name="name" value="submit" onclick="getdata()" />
</form>