ASP.NET MVC中的ApiController和Controller之间的区别

发布时间:2022-07-03 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了ASP.NET MVC中的ApiController和Controller之间的区别脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

使用Controller渲染普通视图。 ApiController操作仅返回序列化并发送到客户端的数据,不返回视图。

注意如果您使用过ASP.NET MVC,那么您已经熟悉了控制器。 它们在Web API中的工作方式类似,但Web API中的控制器派生自ApiController类而不是Controller类。 您将注意到的第一个主要区别是Web API控制器上的操作不返回视图,它们返回数据。

ApiControllers专门用于返回数据。 例如,它们负责将数据透明地序列化为客户端请求的格式。 此外,它们默认遵循不同的路由方案(如:将URL映射到操作),按惯例提供REST-ful API。

您可以使用Controller而不是带有一些(?)手动编码的ApiController来执行任何操作。 最后,两个控制器都建立在ASP.NET基础之上。 但是,拥有REST-ful API是如此普遍的要求,即创建WebAPI是为了简化这种API的实现。

在两者之间做出决定相当简单:如果你正在编写一个基于HTML的web / internet / intranet应用程序 - 可能偶尔会在这里和那里返回json的AJAX调用 - 坚持使用MVC / Controller。 如果要为系统提供数据驱动/ REST-ful接口,请使用WebAPI。 当然,您可以将两者结合起来,从MVC页面获得ApiController来处理AJAX调用。

举一个现实世界的例子:我目前正在使用ERP系统,为其实体提供REST-ful API。 对于此API,WebAPI将是一个很好的候选者。 同时,ERP系统提供了一个高度AJAX-ified的Web应用程序,您可以使用它来为REST-ful API创建查询。 Web应用程序本身可以实现为MVC应用程序,利用WebAPI来获取元数据等。

 


 

在两者之间做出决定相当简单:如果你正在编写一个基于HTML的web / internet / intranet应用程序 - 可能偶尔会在这里和那里返回json的AJAX调用 - 坚持使用MVC / Controller。 如果要为系统提供数据驱动/ REST-ful接口,请使用WebAPI。 当然,您可以将两者结合起来,从MVC页面获得ApiController来处理AJAX调用。   基本上控制器用于mvc和api-controller用于Rest-您可以根据需要在同一程序中使用API


Web API中的每个方法都将返回数据(JSON)而不进行序列化。

但是,为了在MVC控制器中返回JSON数据,我们将返回的Action Result类型设置为JsonResult并在对象上调用Json方法以确保它以JSON打包。


你宁愿写作和维护哪个?

ASP.NET MVC

public class TweetsController : Controller {
  // GET: /Tweets/
  [HttpGet]
  public ActionResult Index() {
    return Json(TwITter.GetTweets(), JsonRequestBehavior.AllowGet);
  }
}

ASP.NET Web API

public class TweetsController : ApiController {
  // GET: /Api/Tweets/
  public List<Tweet> Get() {
    return Twitter.GetTweets();
  }
}

我喜欢ASP.NET Core的MVC6将这两种模式合并为一种这一事实,因为我经常需要支持这两种模式。 虽然您可以调整任何标准MVC Startup.cs(和/或开发您自己的Global.aSAX.cs类)来行动&amp; 表现得像ApiController,它可能很难维护和测试:最重要的是,让控制器方法返回ActionResult与其他人混合返回原始/序列化/ IHttpActionResult数据从开发人员的角度来看可能非常混乱,特别是如果你' 不要单独工作,需要让其他开发人员加快这种混合方法的速度。

到目前为止,我在ASP.NET非核心Web应用程序中最小化该问题的最佳技是将Web API包导入(并正确配置)到基于MVC的Web应用程序中,因此我可以充分利用这两者 世界:Startup.cs为视图,Global.asax.cs为数据。

为此,您需要执行以下操作:

  • 使用NuGet安装以下Web API包:Startup.csGlobal.asax.cs
  • 将一个或多个ApiControllers添加到Startup.cs文件夹中。
  • 将以下WebApiconfig.cs文件添加到您的Startup.cs文件夹:

using System.Web.Http;

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttPRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            @R_360_557@: new { id = RouteParameter.Optional }
        );
    }
}

最后,您需要将上述类注册到Startup类(Startup.csGlobal.asax.cs,具体取决于您是否使用OWIN Startup模板)。

Startup.cs

 public void Configuration(IAppBuilder app)
 {
    // Register Web API routing support before anything else
    GlobalConfiguration.Configure(WebApiConfig.Register);

    // The rest of your file goes there
    // ...
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalfilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    ConfigureAuth(app);
    // ...
}

的Global.asax.cs

protected void Application_Start()
{
    // Register Web API routing support before anything else
    GlobalConfiguration.Configure(WebApiConfig.Register);

    // The rest of your file goes there
    // ...
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    // ...
}

我在博客上写的这篇文章进一步解释了这种方法及其优缺点。


 

脚本宝典总结

以上是脚本宝典为你收集整理的ASP.NET MVC中的ApiController和Controller之间的区别全部内容,希望文章能够帮你解决ASP.NET MVC中的ApiController和Controller之间的区别所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。