草庐IT

c# - 来自 ASP.NET 2.0 的 REST

coder 2024-05-25 原文

我刚刚建立了一个 asp.net 2.0 网站。现在我需要添加 REST Web 服务,以便我可以与另一个 Web 应用程序通信。我以前使用过 2 个 SOAP Web 服务项目,但完全没有 REST 经验。我想只有几个星期就可以了。谷歌搜索后,我发现这并不容易。

这是我发现的:

asp.net 没有开箱即用的 REST。

WCF REST Starter Kit Codeplex Preview 2基于 .net 3.5,仍处于测试阶段

Rest ASP.NET Example

REST Web Services in ASP.NET 2.0 (C#)

Exyus

Handling POST and PUT methods with Lullaby

ADO.NET Data Service

...

现在我的问题,

a) 是 .net 2.0 的 REST 解决方案吗?如果是,哪个是最佳解决方案?

b) 如果必须的话,将我的 asp.net 从 2.0 迁移到 3.5 有多难?是编译就这么简单,还是要改很多代码?

c) WCF REST Starter Kit 是否足以在生产中使用?

d) 我是否必须先学习 WCF,然后再学习 WCF REST 入门工具包?从哪里开始最好?

在此感谢您的帮助。

谢谢 韦斯

最佳答案

如果您正在寻找一个模板化 REST 服务的项目,那么您说没有开箱即用的解决方案是对的。但是,使用 WCF 可以实现 RESTful Web 服务。关键部分是在定义您的服务函数时使用多个属性,让 .NET 框架知道该函数不需要 SOAP。要使用的主要属性是 WebInvoke属性。

这是来自 developer.com 的示例:

[OperationContract]
[WebInvoke(Method = "PUT", UriTemplate = "/admin/post/{id}")]
void UpdatePost(string id, Post post);

以上代码实际上将在您的 Web 服务的接口(interface)中定义。当您创建 WCF Web 服务项目时,会自动创建该接口(interface)。该功能的实际代码将放在用于实现 Web 服务的类中。

查看 developer.com 上的文章以获取完整教程。如果您是 WCF 新手,一开始可能会觉得不知所措,但在您深入研究之后,我相信您会很快上手。这是文章的链接:http://www.developer.com/net/article.php/10916_3695436_1

回答你所有的问题,

a) 在 .NET 2.0 中,您应该能够使用 WSE2.0 构建 RESTful 服务,但如果您可以选择使用 .NET 3.5,我强烈建议您选择 WCF,因为它更容易,并且在设计时考虑到了 REST。

b) 转换您的项目一点也不难。这只是在您的项目设置中定位新版本框架的问题。不过,将 Web 服务从 WSE2.0 服务转换为 WCF 服务会有点棘手。最简单的方法是将代码从每个不同的 Web 服务函数复制到实现新版本函数的类中。复制粘贴 shinanigans :)

c) 我不确定您指的是什么入门工具包。 RESTful Web 服务应该在 WCF 中完全支持,从 3.5 开始完全发布

d) 在开始之前至少了解一点 WCF 会很有帮助,但为了开始,完全理解它并不重要。我建议您通读 MSDN article on WCF至少一次,然后开始工作。我相信您在开始时会遇到其他问题,但您可以在遇到这些部分时查找它们。

无论如何,我希望这些信息对您有所帮助。祝你好运。

编辑

REST 世界中进行了一些改进。正如 Darrel Miller 在评论中提到的,WCF 实际上并不是在考虑 REST 的情况下构建的。我之前说错了。事实上,该框架是在考虑 SOAP 的情况下构建的,而 WebInvoke 属性填补了这一空白。尽管围绕该主题(Web API 与 WCF REST)存在很多争论,但 ASP.NET Web API 是在 .NET 中构建 REST 服务的新选项。我强烈建议阅读这篇文章并能够在他们的项目中使用 .NET 4.5 的任何人将其作为一个选项进行研究。

关于c# - 来自 ASP.NET 2.0 的 REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/691111/

有关c# - 来自 ASP.NET 2.0 的 REST的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  3. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  4. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  5. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  6. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  7. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  8. .net - .NET 将如何影响 Python 和 Ruby 应用程序? - 2

    我很好奇.NET将如何影响Python和Ruby应用程序。用IronPython/IronRuby编写的应用程序是否会非常特定于.NET环境,以至于它们实际上将变得特定于平台?如果他们不使用任何.NET功能,那么IronPython/IronRuby相对于非.NET同类产品的优势是什么? 最佳答案 我不能说任何关于IronRuby的东西,但是大多数Python实现(如IronPython、Jython和PyPy)都试图尽可能忠实于CPython实现。不过,IronPython正在迅速成为这方面的佼佼者之一,并且在PlanetPyth

  9. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  10. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

随机推荐