asp.net core下的RequestBody和RequestForm提交

本文介绍了ASP.NET Core中使用RequestBody和RequestForm进行数据提交的方法。对比了RestSharp和JQuery AJAX请求这两种客户端实现方式,并提供了详细的代码示例。

最近在开发asp.net core时,遇到RequestBody和RequestForm数据提交方式,整理了一下,把结果记录下来。

对于RequestForm一般是接收表单的信息,而RequestBody通常是来接收较为复杂的数据(集合或杂杂对象)在asp.net中很容易区分接收,在action用[FromBody]和[FromForm]来标识就可以,对于客户端来说,区别就要大一些,这里记录两种方式,RestSharp和JQuery的ajax请求两种方式。

  1. 服务端

[HttpPost("additem")]
public IActionResult AddItem([FromBody]Item item)
{
    return new JsonResult(new { Result = 0, Message = "添加成功",Content=item.ToString() },new Newtonsoft.Json.JsonSerializerSettings ());
}
 
[HttpPost("additem")]
public IActionResult AddItem([FromForm]Item item)
{
    return new JsonResult(new { Result = 0, Message = "添加成功" ,Content=item.ToString()},new Newtonsoft.Json.JsonSerializerSettings ());
}

 

  1. RestSharp方式

    在项目中,用Nuget安装RestSharp类库,我用的是v105.2.3。

    用RestSharp提交RequestBody和RequestForm相对简单,代码如下:

using System;using RestSharp;namespace RestSharpTest
{
    class Program    {
        static void Main(string[] args)
        {
            while (true)
            {
                var client = new RestClient("http://localhost:5000");
                var request = new RestRequest("additem", Method.POST);
                request.RequestFormat = DataFormat.Json;
                Console.WriteLine("1、RequestBody  2、RequestForm");
                switch (Console.ReadLine())
                {
                    case "1":
                        request.AddJsonBody(new { ID = 111, Name = "张三", Birthday = DateTime.Now });
                        break;
                    case "2":
                        request.AddObject(new { ID = 111, Name = "张三", Birthday = DateTime.Now });
                        break;
                }
                var response = client.Execute(request);
                Console.WriteLine(response.Content);
              
            }
 
        }
    }
}


  1. JQuery中用ajax请求

    如果用jquery访问别的web,设置跨域访问(关于跨域访问,查看http://www.cnblogs.com/xishuai/p/aspnet-core-cors.html

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>    <title></title>
	<meta charset="utf-8" />    <script src="bower_components/jquery/dist/jquery.min.js"></script></head><body>    <input id="sava1" value="保存RequestForm" type="button"/>    <input id="sava2" value="保存RequestBody" type="button" />    <script>        $("#sava1").click(function () {
            $.post("http://localhost:5000/additem", { ID: 112, Name: "李四", Birthday: "2017-01-23" }, function (result) {             
                alert(result.Message+result.Content);
            },"json")
        })
 
        $("#sava2").click(function () {         
            $.ajax({
                type: "POST",
                url: "http://localhost:5000/additem",
                contentType: "application/json",
                dataType: "json",
                async: true,
                data: JSON.stringify({ "ID": 112, "Name": "李四", "Birthday": "2017-01-23 12:12:12" }),
                success: function (result) {
                    alert(result.Message + result.Content);
                }
            });
 
        })
    </script></body></html>


一般情况下,web api是用[FromBody],因为一般web api是供app或DeskTop的应用访问,web页面请求用[FromForm],一般情况下web页面是通过表单向后台提交信息。


package com.smics.apps.etst.action.user.form; import com.smics.apps.etst.domain.AbstractForm; import com.smics.apps.etst.domain.TstScrapForm; import com.smics.apps.etst.domain.TstUnScrapForm; import com.smics.apps.etst.domain.TstUnTerminateForm; import com.smics.apps.etst.domain.admin.ResponserDept; import com.smics.apps.etst.service.AdminService; import com.smics.apps.etst.service.CustomerSaleService; import com.smics.apps.etst.service.EtstService; //保存签核单子 public class SaveRequestForm extends BaseRequestFormAction { public String execute() throws Exception { String dept = null; String sec = null; //如果表单类型是unter if (this.requestForm.getFormType().equalsIgnoreCase("Testing Unterminate Request Form")) { TstUnTerminateForm utForm = (TstUnTerminateForm) this.requestForm; dept = utForm.getUtResdept(); sec = utForm.getUtRessec(); if (("Please Select".equalsIgnoreCase(dept)) || ("Please Select".equalsIgnoreCase(sec))) { utForm.setUtResCostcode(null); utForm.setUtResMagr(null); this.etstService.updateEtsForm(utForm); return "success"; } if ((!"NA".equalsIgnoreCase(dept)) && (!"NA".equalsIgnoreCase(sec))) { ResponserDept respDept = this.adminService.loadResDeptByDeptSec(dept, sec); if (respDept == null) { addActionError("Update can not get " + dept + " / " + sec + " information"); utForm.setUtResdept(null); utForm.setUtRessec(null); return "input"; } String resmgr = this.adminService.findHrOwnerByCostCodeOrgId(respDept.getCostCode(), respDept.getOrgId()); utForm.setUtResCostcode(respDept.getCostCode()); utForm.setUtResMagr(resmgr); } else { utForm.setUtResCostcode("NA"); utForm.setUtResMagr("NA"); } this.etstService.updateEtsForm(utForm); return "success"; } //如果表单类型是unscrap 取消报废 if (this.requestForm.getFormType().equalsIgnoreCase("Testing Unscrap Request Form")) { TstUnScrapForm usForm = (TstUnScrapForm) this.requestForm; dept = usForm.getUsResdept(); sec = usForm.getUsRessec(); if (("Please Select".equalsIgnoreCase(dept)) || ("Please Select".equalsIgnoreCase(sec))) { usForm.setUsResCostcode(null); usForm.setUsResMagr(null); this.etstService.updateEtsForm(usForm); return "success"; } if ((!"NA".equalsIgnoreCase(dept)) && (!"NA".equalsIgnoreCase(sec))) { ResponserDept respDept = this.adminService.loadResDeptByDeptSec(dept, sec); if (respDept == null) { addActionError("Update can not get " + dept + " / " + sec + " information"); usForm.setUsResCostcode(null); usForm.setUsResMagr(null); return "input"; } String resmgr = this.adminService.findHrOwnerByCostCodeOrgId(respDept.getCostCode(), respDept.getOrgId()); usForm.setUsResCostcode(respDept.getCostCode()); usForm.setUsResMagr(resmgr); } else { usForm.setUsResCostcode("NA"); usForm.setUsResMagr("NA"); } this.etstService.updateEtsForm(usForm); return "success"; } //获取这两个字段,例子:TE----Application Engineering dept = this.requestForm.getResponserDept(); sec = this.requestForm.getResponserSec(); //如果是请选择,那就把costcodemagr改为null if (("Please Select".equalsIgnoreCase(dept)) || ("Please Select".equalsIgnoreCase(sec))) { this.requestForm.setResponserCostCode(null); this.requestForm.setResponserMagr(null); this.etstService.updateEtsForm(this.requestForm); return "success"; } if (("SH".equalsIgnoreCase(this.etstService.getSite())) && ((this.requestForm instanceof TstScrapForm)) && (!this.requestForm.isBeQcFlow()) && (((TstScrapForm) this.requestForm).getScReason().toUpperCase().startsWith("BILL TO CUSTOMER"))) { String customerSale = this.customerSaleService.getCustomerSaleByProductId(this.requestForm.getProdId()); if (customerSale.startsWith("Error")) { this.requestForm.setResponserDept(null); this.requestForm.setResponserSec(null); this.requestForm.setResponserCostCode(null); this.requestForm.setResponserMagr(null); ((TstScrapForm) this.requestForm).setScReason(""); addActionError(customerSale); return "input"; } this.requestForm.setResponserCostCode(this.etstService.getCustomerCostCode()); this.requestForm.setResponserMagr(customerSale); } else if ((!"NA".equalsIgnoreCase(dept)) && (!"NA".equalsIgnoreCase(sec))) { ResponserDept respDept = this.adminService.loadResDeptByDeptSec(dept, sec); if (respDept == null) { addActionError("Update can not get " + dept + " / " + sec + " information"); this.requestForm.setResponserCostCode(null); this.requestForm.setResponserMagr(null); return "input"; } String resmgr = this.adminService.findHrOwnerByCostCodeOrgId(respDept.getCostCode(), respDept.getOrgId()); this.requestForm.setResponserCostCode(respDept.getCostCode()); this.requestForm.setResponserMagr(resmgr); } else { this.requestForm.setResponserCostCode("NA"); this.requestForm.setResponserMagr("NA"); } this.etstService.updateEtsForm(this.requestForm); return "success"; } } /* Location: C:\Users\JE03789\Desktop\etst\WEB-INF\classes\ * Qualified Name: com.smics.apps.etst.action.user.form.SaveRequestForm * JD-Core Version: 0.6.0 */
最新发布
09-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值