打開VS2012->FILE->New->Project->Web->ASP.NET MVC 4 Web Application, 修改名字為WebAPIApplication, 單擊OK, 在Project Template中選擇Web API,單擊OK.
2)添加Controller Template選擇Empty API controller名字為StudentValueController.cs代碼如下
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace MvcApplication22.Controllers { public class StudentValueController : ApiController { /// <summary> /// 根據搜索條件獲取學生信息 /// GET /api/StudentValue/GetStudents?stuName=chad&stuAddress=jiaxing /// </summary> /// <param name="name">姓名</param> /// <param name="address">地址</param> /// <returns>滿足條件的學生信息</returns> [HttpGet] public IEnumerable<StudentInfo> GetStudents(string stuName, string stuAddress) { using (DataClassesDataContext dcdc = new DataClassesDataContext()) { List<StudentInfo> items = dcdc.StudentInfos.ToList(); if (stuName != null) { items = items .Where(u => u.stuName.Contains(stuName)).ToList(); } if (stuAddress != null) { items = items .Where(u => u.stuAddress.Contains(stuAddress)).ToList(); } return items; } } /// <summary> /// 根據學生編號獲取學生信息 /// GET /api/StudentValue/GetStudentById/{id} /// </summary> /// <param name="id">編號</param> /// <returns>學生信息</returns> [HttpGet] public StudentInfo GetStudentById(int id) { using (DataClassesDataContext dcdc = new DataClassesDataContext()) { return dcdc.StudentInfos .FirstOrDefault(u => u.stuId.Equals(id)); } } /// <summary> /// 添加學生信息 /// POST /api/StudentValue/AddStudent /// {stuName:'jack', stuAddress:'jiangsu'} /// </summary> /// <param name="item">學生信息</param> /// <returns>添加成功返回學生信息, 否則返回null</returns> [HttpPost] public StudentInfo AddStudent(StudentInfo item) { try { using (DataClassesDataContext dcdc = new DataClassesDataContext()) { dcdc.StudentInfos.InsertOnSubmit(item); dcdc.SubmitChanges(); return item; } } catch (Exception ex) { return null; } } /// <summary> /// 修改學生信息 /// PUT /api/StudentValue/UpdateStudent/{id} /// {stuName:'jack', stuAddress:'jiangsu'} /// </summary> /// <param name="id">編號</param> /// <param name="item">新的學生信息</param> /// <returns>更新成功返回學生信息, 否則返回null</returns> [HttpPut] public StudentInfo UpdateStudent(int id, StudentInfo item) { try { using (DataClassesDataContext dcdc = new DataClassesDataContext()) { StudentInfo newItem = dcdc.StudentInfos .FirstOrDefault(u => u.stuId == id); newItem.stuName = item.stuName; newItem.stuAddress = item.stuAddress; dcdc.SubmitChanges(); return newItem; } } catch (Exception ex) { return null; } } /// <summary> /// 刪除學生信息 /// DELETE /api/StudentValue/DeleteStudent/{id} /// </summary> /// <param name="id">編號</param> /// <returns>刪除成功返回true, 否則返回false</returns> [HttpDelete] public bool DeleteStudent(int id) { try { using (DataClassesDataContext dcdc = new DataClassesDataContext()) { StudentInfo item = dcdc.StudentInfos .FirstOrDefault(u => u.stuId.Equals(id)); dcdc.StudentInfos.DeleteOnSubmit(item); dcdc.SubmitChanges(); return true; } } catch (Exception ex) { return false; } } } }3)修改WebApiConfig.cs內容如下,主要是修改API訪問路徑
using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace MvcApplication2 { public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); } } }
4)用Firefox RESTClient測試編寫的API
提示:在Body中添加json數據時請在Headers中添加Content-Type: application/json
-
修改WebAPI返回數據的樣式如將返回樣式改成JSON:
在Global.asax.cs添加方法
/// <summary>
/// 設置WebAPI返回的樣式(XML或者JSON)
/// </summary>
/// <param name="config"></param>
void ConfigureApi(HttpConfiguration config)
{
// Remove the JSON formatter
//config.Formatters.Remove(config.Formatters.JsonFormatter);
// or
// Remove the XML formatter
config.Formatters.Remove(config.Formatters.XmlFormatter);
}
並在方法Application_Start中調用
ConfigureApi(GlobalConfiguration.Configuration);
-
MVC4發布到IIS,出現HTTP 錯誤 404.0 - Not Found的解決方法。
1)Web Site所對應的Application Pool的.NET Framework Version改成v4.0。
2)由於使用的是VS2012,只要在MVC根目錄的web.config中添加
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
就行了