【问题标题】:Which advantage does the WebAPI controller give over the MVC controller? [closed]与 MVC 控制器相比,WebAPI 控制器有哪些优势? [关闭]
【发布时间】:2018-05-09 13:27:40
【问题描述】:

我正在开发一个使用 WebAPI 的 MVC5 站点。我已经定义了一个帮助类来处理传入请求的一些日志记录,可以为任何需要记录有关所发出请求的数据的操作调用该类。 (主要是 IP 地址、引荐来源网址、url 和用户代理,以及一些标头值。)而且我遇到了问题...
Controller 类有一个我使用的“HttpRequestBase”类型的属性请求。我曾假设 ApiController 中的 Request 属性将是相同的类型,但不,它是“HttpRequestMessage”。
这很烦人,所以我想知道我的项目中是否真的需要 WebAPI。我想使用 WebAPI 返回网站本身使用的各种数据。为什么不使用常规控制器而不是 ApiController?在单个项目中使用 ApiController 和 Controller 有什么好处?


请不要就为什么 WebAPI 比使用常规控制器更好(或不更好)发表意见。我需要知道使用 WebAPI 在控制器旁边有哪些技术优势,而不仅仅是使用控制器!

【问题讨论】:

  • 如果你有MVC,基本上就不需要使用Web API了。 Web API 更适合那些没有整个 MVC 库作为依赖项的服务。
  • 我猜 Logger 辅助类是一个静态类是否正确,它有某种 Log(HttpRequestBase) 方法?以及您如何准确调用 Logger 方法?请向我们提供代码示例。
  • 我不认为这是基于意见的。 ApiControllerController 之间存在技术差异。
  • 正如 Camilo 所说,两者之间存在明显的技术差异,因此与意见无关。这与两种技术背后的非常不同的实现有关,尽管它们看起来非常相似。使用 ApiController 比使用普通的 ApiController 有什么好处?从技术上讲...
  • 差不多了,@orel Eraki。不过,它不是静态的。如果同时发出两个或多个请求,静态类会导致问题。调用 ActionResult 方法,使用它获得的请求创建一个辅助对象,并验证结果以查看操作是否有效。我正在跟踪数据库中的更改,因此帮助程序类会将数据库中的任何更改链接到导致更改的请求。 (出于历史目的。)

标签: c# asp.net asp.net-web-api asp.net-mvc-5


【解决方案1】:

WebAPI 控制器专门用于 API,而 MVC 控制器更适合返回视图。

虽然两者都可以处理这两种情况,但 WebAPI 控制器有一些功能可以让 API 更轻松:

  • 更明确的响应代码
  • 内容协商
  • get、post、put、delete 等动词的命名约定
  • ...

这两种控制器之间的区别有点令人遗憾。最后,他们做同样的事情。

这也是为什么在 ASP.NET core 中,WebAPI 和 MVC 被合并的原因。您不会发现您描述的 ASP.NET 核心中的差异。如果这是你的一个选择,你可以走这条路。

【讨论】:

  • “虽然两者都可以处理这两种情况”,你确定吗?我不认为ApiControllerView/PartialView 返回助手。
  • 不,它没有,但是 WebAPI 控制器没有理由不能返回 HTML 字符串并将内容类型设置为 text/html。这将是一种完全倒退的做事方式,但仍有可能。
  • 它可以,但它没有ViewBagViewData 并且它无法处理实际视图。至少,并非没有一些修改。
  • 没错,我的意思是它们都处理传入的 HttpRequest 并返回一个 HttpResponse。他们的做法不同,但他们的做法是一样的。
猜你喜欢
  • 2011-08-02
  • 2023-03-11
  • 1970-01-01
  • 2015-12-28
  • 2013-09-22
  • 2012-05-17
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
相关资源
最近更新 更多