- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
目标是构建一个服务,然后我将通过 jQuery 和基于标准的 Web 前端、移动设备“胖客户端”以及很可能是 WPF 桌面应用程序使用该服务。
WCF 似乎是一个不错的选择,但我从未使用 WCF 构建过 RESTful 服务,所以我不确定从哪里开始采用这种方法。
我正在考虑的另一个选择是使用 ASP.NET MVC,添加一些自定义路由,添加一些 Controller 操作并使用不同的 View 来推出 JSON、xml 和其他返回类型。
这个项目对我自己来说主要是一个学习练习,我想多花点时间把它做“正确”,这样我就能更好地理解各个部分是如何组合在一起的。
所以我的问题是,我应该使用哪种方法来构建此 RESTful 服务,这样做有哪些优势?
最佳答案
通常,对于任何类型的托管服务,我会说 WCF,但在使用 JSON 作为序列化机制的 RESTful 服务的特定情况下,我更喜欢 ASP.NET MVC(其余部分我将其称为 ASP.NET这个答案)。
第一个原因是因为路由机制。在 WCF 中,您必须在契约上定义它,这很好,但是如果您必须快速更改路由,从我的角度来看,使用 ASP 中的路由机制来完成它们要容易得多。 NET.
此外,对于上述观点,如果您在 WCF 中通过多个接口(interface)公开多个服务,则很难获得 URL 结构的完整图像(这很重要),而在 ASP.NET 中,您(通常)拥有所有路线分配在一个地方。
关于 ASP.NET 的第二件事是,您将可以访问 ASP.NET 所熟知的所有内部对象(请求、响应、服务器等),这在公开 HTTP 时必不可少-特定端点(这是您正在创建的)。诚然,您可以在 WCF 中使用许多相同的东西,但您必须明确告诉 WCF 您正在这样做,然后在设计您的服务时考虑到这一点。
最后,通过个人经验,我发现 DataContractJsonSerializer
不能很好地处理 DateTimeOffset
值,在使用可以被人们调用的服务(通过任何端点)时,您应该在 DateTime
上使用这种类型在多个时区。在 ASP.NET 中,您可以使用不同的序列化程序,或者如果需要,您可以创建自己的 ActionResult
,它使用自定义序列化程序。我个人更喜欢 JSON.Net serializer .
我喜欢的 JSON.Net 序列化程序和 ASP.NET 的优点之一是,如果您聪明的话,您可以使用匿名类型。如果您在非泛型类型上创建一个静态泛型方法,然后委托(delegate)给一个内部泛型类型,您可以使用类型推断轻松地将匿名类型用于您的序列化返回值(当然,假设它们是一次性的,如果您有一个一致返回的结构,你应该定义它并使用它)。
还应该提到的是,如果开发 RESTful 服务,您不必完全放弃 WCF。如果您从您的服务中推送 ATOM 或 RSS 提要,那么 System.ServiceModel.Syndication
中的类massive 的命名空间有助于构建和序列化这些提要。创建 ActionResult
类的简单子(monad)类以获取 SyndicationFeed
的实例然后在执行 ActionResult
时将其序列化到输出流非常简单。
关于c# - 在 .NET 中开发新的 RESTful Web 服务——我应该从哪里开始? ASP.NET-MVC、WCF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2268793/
我遇到了一个奇怪的问题。我的应用程序的 Release 版本似乎运行良好,但最近当我切换到 Debug 版本时,我在启动时立即遇到访问冲突。当释放分配的内存块时,就会发生访问冲突。所有这些都发生在静态
我在 C# 中偶然发现了这种奇怪的语法形式,并试图弄清楚它的含义以及如何使用它。网络上似乎没有关于此的任何文档。 object data = new { var1 = someValue, var2
我正在尝试使用浏览器的内置类型 CSSStyleDeclaration 以编程方式传递和修改样式(由于 .cssText 属性,这很方便)。 但是,new CSSStyleDeclaration()
我有现成的代码: internal bool firstAsSymbol(out Symbol s) { return (s = first as Symbol) !=
在新的 Eclipse 版本 2022-03 中,一些(但不是全部)java 项目在 Project Explorer View 中的外观发生了变化。尽管 Package Presentation 设
我正在尝试使用 FormData 通过获取 API 在 POST 请求中发送用户输入的数据。问题是,当我用我创建的表单创建一个新的 FormData 对象时,它一直在创建一个空对象——没有条目/键/值
我有一个用一些 intel-intrinsincs 编写的 C 代码。在我先用 avx 然后用 ssse3 标志编译后,我得到了两个完全不同的汇编代码。例如: AVX: vpunpckhbw %xm
最近,discord 为您自己的应用程序添加了对斜杠命令的支持。我通读了它的文档,并尝试搜索一些视频(但是该功能刚刚出现),但我不明白我实际上需要做什么才能使其正常工作。我正在使用 WebStorm(
我想使用 JRI 从 Java 调用 R。 我在 eclipse 下在主类中运行它: Rengine c = new Rengine(new String[] { "--vanilla" },
我正在使用新的 Place Autocomplete那是来自新的静态Google Places SDK 客户端库 (here)。所以它真的很容易使用,我刚得到this tutorial它按预期工作。
我刚刚更新到 flutter 版本 1.25.0-5.0.pre.92,我的代码中出现了很多与空安全相关的错误,这些错误以前运行良好。我没有以任何方式选择空安全,我所做的只是运行 flutter 升级
我已经使用 React Native 有一段时间了,但我想我会在网络上试用 React。所以我遵循了这个指南:https://reactjs.org/docs/create-a-new-react-a
周六早上在这里。尝试学习新的 Scala 编译器 dotty。 安装在我的 Mac 上使用 brew install lampepfl/brew/dotty 安装成功。我有版本 dotr -versi
我使用了谷歌地方的新依赖。单击自动完成 View 时应用程序崩溃。错误如下。, java.lang.NullPointerException: Place Fields must be set.
我关注了这个博客-> https://medium.com/@teyou21/training-your-object-detection-model-on-tensorflow-part-2-e9e
在哪里可以找到用于在此架构上进行组装的新寄存器的名称? 我指的是 X86 中的寄存器,如 EAX、ESP、EBX 等。但我希望它们是 64 位的。 我认为它们与我反汇编 C 代码时不同,我得到的是 r
新的服务总线库 Azure.Messaging.ServiceBus 使用 ServiceBusReceivedMessage 来接收消息 https://learn.microsoft.com/en
需要使用实时流媒体 channel 的实时编码类型在新的 Azure 门户中配置广告插入和石板图像。请帮忙解决这个问题,因为我找不到该功能。 最佳答案 此处描述了 Azure 媒体服务的广告插入选项
我正在使用新的 GitHub 操作,下面的工作流程的想法是在打开或同步 pr 时运行,它应该首先检查并安装依赖项,然后运行一些 yarn 脚本 name: PR to Master on: pul
我听说 DMD 2.058 中将有一个用于匿名函数的新语法,但我找不到任何相关信息。新语法是什么?旧语法是否会被弃用? 最佳答案 我相信它就像 C#'s . 以下内容是等效的: delegate(i,
我是一名优秀的程序员,十分优秀!