我有一个工作的API与不同的端点 - 一个不同的控制器 - 对于我期望收到的每种类型的XML post数据。现在,客户希望我们为所有事物使用相同的端点。唯一确定方向的是XML数据的内容 - 基本上是根元素的名称。多个apis共享相同端点的正确路由配置
我希望能够尽可能多地利用我现有的工作,所以我试图添加一个新的控制器“路由器”,它完全符合以下条件 - 根据收到的内容重定向到正确的路由。我尝试了一些东西,但似乎没有得到任何牵引力。
如果有更好的方法来处理这个问题,我会乐于听到它。
// WebApiConfig.cs
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
//routeTemplate: "Router",
constraints: null,
defaults: new { id = RouteParameter.Optional }
);
//在RouteConfig.cs中 - 这是多余的特定MapRoute和MapHttpRoute?
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(name: "First", url: "First/{action}/{id}");
routes.MapRoute(name: "Second", url: "Second/{action}/{id}");
routes.MapRoute(name: "Third", url: "Third/{action}/{id}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home",
action = "Index",
id = UrlParameter.Optional }
);
但无论如何,我有我的API交通击中RouterController (我会承认我并不完全清楚为什么它的工作),但一旦 那里,我怎么去重新路由基于XML数据发布了吗?
public RouterController()
{
log.Debug("Inside RouterController");
}
public IHttpActionResult Post(object postdata)
{
// how to determine the postdata contents/XML structure to get the
// root element and then redirect to the "true" controller?
}
这里有几个问题:第一,为什么在WebApiConfig.cs路由定义和RouteConfig.cs的(明显)路由冗余?其次,根据内容和路线适当地识别流量的最佳方式是什么?
感谢您的协助。我承认在这里相当失明,所以任何帮助表示赞赏。
非常感谢,这非常有帮助。我用这种方式重新设计了一半,到目前为止,事情正在发生变化。欣赏它! – nonesuch 2015-04-02 18:48:18
所以,我的一些类是嵌套的xml结构。当我执行Deserialize(xmlReader)时,在新的NestedClass对象中正确创建了根元素的直接子元素,但是下面的任何元素及其子元素均为null。我一直在纠缠这几个小时,无法弄清楚发生了什么问题。 – nonesuch 2015-04-08 04:39:51
我认为你需要提出新的问题。添加您用于序列化的XML示例和类。你可以在这里添加一个问题链接作为评论。 – 2015-04-08 08:03:57