3个月前接手的 java web 项目前几天交付验收成功了,作为该项目开发组的负责人,在苦苦加班2个多月后得到公司及客户的肯定,心里那个叫高兴啊。
所做的 java web 的整体架构非常简单易懂,整个网站以前端为主体,通过ajax与后台数据交互,前后端低耦合,有些面向服务架构的味道。因为博主C#做的比较多,所以也借机用相同的方式玩一玩asp.net。
这篇博客主要总结了 Asp.net WebApi 项目的前后端互传json以及上传文件的方法。
在面向服务的架构模式中,整个网站前后端耦合度低,将前端作为主体,通过ajax与后台交换json数据。
上传文件通过input[type=‘file’]来获取file,并通过FormData传给后台。
修改路由规则。打开/Appstart/WebApiConfig.cs,添加{action}段
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
添加Controller。在Controllers文件夹里新建一个空的ApiController,取名为 UserController
修改UserController.cs代码为如下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace CommonAction.Controllers
{
public class UserController : ApiController
{
public JObject Func1([FromBody]JObject postJson)
{
postJson.Add("success", true);
return postJson;
}
}
}
编写前端代码。右击项目名->添加->Html页,并将新建的html页面的代码替换为下面代码
name:
age:
将HtmlPage1设置为起始页面,F5键运行。待网页加载完毕后,按f12打开浏览器console,填写name以及age,点击submit按钮。可以看到浏览器console中的返回信息。
可以看出,代码运行的很成功。
网站的所有数据交换,都可以通过这样的方式进行:前端构造json数据,post到后台,后台接收后处理计算,并构造json返回。
但还有一种情况是需要进行文件交互。下载文件比较简单,这里只说一下上传。
首先在html页面增加input[type=‘file’];
pic:
html的button事件更换
增加后台代码
public JObject Func2()
{
JObject returnJson = new JObject();
var request = System.Web.HttpContext.Current.Request;
var formData = request.Form;
string name = formData["name"];
string age = formData["age"];
if (request.Files.Count > 0)
{
var file = request.Files[0];
var savePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "uploadImgs/";
if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);
file.SaveAs(savePath + file.FileName);
}
returnJson.Add("name", name);
returnJson.Add("age", age);
returnJson.Add("success", true);
return returnJson;
}
运行效果如图
打开项目文件夹,可以看到图片被成功保存。
通过这两种ajax,即可完成前后端几乎所有的数据交换工作。使用这种架构,可以很好的分离前后端的工作,代码结构更清晰,写出来漂亮,写的也舒服。
若有不足请不吝赐教,感谢。