0

我需要使用 .NET 技术实现 API。该协议是基于 HTTP 的“普通旧 XML”(POX)。有 6 个 API 调用,但都来自同一个 URI。API 方法由顶级 XML 元素中的“方法”属性标识。请求和响应中的子 XML 元素取决于调用的方法。

例如:

<req method="GetStuff"><id>42</id></req>

可能会做出回应

<resp method="GetStuff"><Thing name="Bob"/></resp>

或者:

<req method="Status"><verbose>false</verbose></req>

可能会做出回应

<resp method="Status"><status>OK</status></resp>

我考虑过 WCF - 我可以看到,按照 REST API 的示例,我可以轻松地对 XML 进行序列化和反序列化,但看不到将方法属性映射到单独方法的明显ServiceContract方法。我也可以考虑 MVC,但需要在 MVC 管道中的某个地方弄乱以将方法映射到适当的 Action。

请问有什么建议吗?

4

1 回答 1

0

您想要的方法分派技术 ( <req method='methodName'>) 是一种非标准技术,因此没有对它的内置支持。你有几个选择:

1)只需自己进行调度。例如,如果使用 WCF,有一个 OperationContract 方法来查看属性,然后调用您需要的 6 个方法之一。

2)创建一个自定义调度程序。对于 WCF,请查看http://msdn.microsoft.com/en-us/library/ms734665%28v=vs.110%29.aspx。对于 ASP.NET Web API,您可能可以从这里开始 - http://www.asp.net/web-api/overview/advanced/http-message-handlers - 但我对它的经验较少,所以不能告诉你当然。

方法#1 肯定要容易得多,但如果你要创建很多这样的 API,#2 可能是要走的路。或者只是切换到更标准的东西 - SOAP 或“真正的”RESTful API,其中所有路由/调度信息都在 URL 本身中,而不是在消息正文中。

于 2014-12-07T20:21:38.813 回答