1

这是我的另一个问题的更具体版本:Restful MVC Web Api Inheritance,我希望对此的回答能帮助我回答这个问题。

我使用 ASP.NET web api,
我希望能够路由这样的东西:[{object}/{id}]/{controller}/{id}. 所以我想要一个可选的以“api端点”结尾
的对象数组。/{id}

我希望能够路由这些:
/houses
/houses/3
suburbs/3/houses
council/5/suburbs/houses
city/8/council/suburbs/houses
ETC

get(List<restRoute>parents, int id){
    ...
}

restRoute 将是一个对象,其中对象的字符串和 id 的可选 int(或 guid 等)

有谁知道我可以从哪里开始?
我不想单独路由每一个。

4

2 回答 2

2

我在 ASP.NET MVC 中从盒子路由也遇到了这样的问题。它用作公共路由的好方法,但对于自定义路由来说不是那么灵活。

在 WCF Web Api(CTP 版本中的 ASP.NET Web api)中使用了基于属性的路由。

我认为它更灵活,但不利的一点是 - 每个方法都应该有路由属性。

看看这篇博文:

http://www.strathweb.com/2012/05/attribute-based-routing-in-asp-net-web-api/

它描述了如何使用 ASP.NET Web Api 实现基于属性的路由。因为这种方法对于您可以映射到方法的路线更加灵活,所以它对您很有帮助。

于 2012-07-21T13:36:38.050 回答
1

您可以在您的路由中使用{*anything} 可变分段 URL模式并处理拆分并确定 url 的哪一部分对应于您的方法中的哪些数据位:

Global.asax:

routes.MapRoute(
            "Special", // name
            "{*allthethings}", // parameters
            new { controller = "Special", action = "Sauce" } // defaults
        );

SpecialController:

public ActionResult Sauce()
{
    string data = RouteData.Values["allthethings"].ToString();
    string[] items = data.Split('/');
    foreach (string item in items)
    {
        // do whatever you need to figure out which is what!
    }

    return View();
}

如果您想更聪明一点,您可以创建自己的自定义 RouteHandler 来进行拆分。像David Ebb 的 PK 路由处理程序这样的东西可能会起到作用,通过一些定制来满足您在路由处理中的要求。您可以使用它来拆分“allthethings”参数并将其转换为您的List<RestRoute>格式,然后再将请求传递给控制器

于 2012-07-23T11:43:46.433 回答