API控制器与MVC控制器的区别及使用

在开发Web应用程序时,经常需要处理客户端请求并返回数据。在ASP.NET MVC框架中,通常使用控制器来处理这些请求。然而,随着JavaScript框架和移动设备的普及,越来越需要以JSON格式返回数据。这时,API控制器就显得尤为重要。API控制器与MVC控制器的主要区别在于,API控制器专门用于返回数据,而MVC控制器则返回视图。这意味着,如果应用程序需要与JavaScript框架交互,或者需要提供RESTful API,那么使用API控制器将更加合适。

首先,让了解一下如何在现有的MVC应用程序中添加API控制器。如果从头开始创建一个新的项目,可以选择创建一个Web API项目。但是,如果已经有一个正在运行的MVC项目,可以按照以下步骤添加API控制器:

  1. 添加对System.Web.Http.WebHost的引用。
  2. 在App_Start文件夹中创建一个新的类文件,命名为WebApiConfig.cs。
  3. 在WebApiConfig类中注册路由。

下面是一个WebApiConfig类的示例:

public static class WebApiConfig { public static void Register(HttpConfiguration configuration) { configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); configuration.Routes.MapHttpRoute( "DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional } ); } }

接下来,需要修改Global.asax.cs文件,以确保Web API配置首先被注册。可以通过添加以下代码来实现这一点:

protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); // 其他配置代码... }

现在,可以创建一个API控制器并使用它了。下面是一个简单的BrandController示例:

public class BrandController : ApiController { // GET api/brand public IEnumerable Get() { return new string[] { "value1", "value2" }; } // GET api/brand/5 public string Get(int id) { return "value"; } // POST api/brand public void Post([FromBody]string value) { } // PUT api/brand/5 public void Put(int id, [FromBody]string value) { } // DELETE api/brand/5 public void Delete(int id) { } }

现在,已经准备好测试API控制器了。例如,可以调用Get(int id)方法来获取一个特定的品牌信息,或者调用Get方法来获取所有品牌信息。如果注意到返回的数据是XML格式的,而希望返回JSON格式的数据,只需要在WebApiConfig类中添加以下代码行:

configuration.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

这样,WebApiConfig类应该看起来像这样:

public static void Register(HttpConfiguration configuration) { configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); configuration.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); configuration.Routes.MapHttpRoute( "DefaultApi", "Api/{controller}/{id}", new { id = RouteParameter.Optional } ); } // GET Api/brand public IEnumerable Get() { var result = brandQuery.GetAll(); return result; } // GET Api/brand/5 public BrandViewModel Get(int id) { var result = brandQuery.Get(id); return result; }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485