【发布时间】:2015-06-06 16:56:44
【问题描述】:
对于我希望接收的每种类型的 XML 发布数据,我有一个具有不同端点(不同控制器)的有效 API。现在,客户希望我们对所有事情都使用相同的端点。唯一确定方向的是 XML 数据的内容——基本上是根元素的名称。
我希望能够尽可能多地利用我现有的工作,因此我正在尝试添加一个新的控制器“路由器”,它正是这样做的——根据接收到的内容重定向到正确的路由。我已经尝试了一些东西,但似乎无法获得任何牵引力。
如果有更好的方法来处理这个问题,我愿意听听。
// 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 路由中有(明显的)冗余?其次,根据内容和路线适当识别流量的最佳方法是什么?
感谢您的帮助。我承认在这里跑得相当盲目,因此感谢您提供任何帮助。
【问题讨论】:
标签: c# xml routing asp.net-web-api2