是否支持NancyFx反向路由,如ASP.NET MVC?

时间:2014-01-14 08:16:04

标签: c# nancy

ASP.NET MVC允许生成强大类型的URL的非常有用的方式,如:

<a href="@(Url.Action<AccountSettingsController>(c => c.BusinessInfo()))">Business info</a>

甚至:

<a href="@(Url.Action<SomeOtherController>(c => c.SomeActionMethod(id, paramX, paramY)))">Business info</a>

使用简单的自定义URL帮助程序:

public static string Action<TController>(
    this UrlHelper urlHelper,
    Expression<Action<TController>> action,
    string fragment = null
) where TController : BaseController
{
    var routeValues = InternalExpressionHelper.GetRouteValuesFromExpression(action);
    var url = UrlHelper.GenerateUrl(
            routeName: null,
            actionName: null,
            controllerName: null,
            protocol: null,
            hostName: null,
            fragment: fragment,
            routeValues: routeValues,
            routeCollection: urlHelper.RouteCollection,
            requestContext: urlHelper.RequestContext,
            includeImplicitMvcValues: true
        );
    return url;
}

它允许在一个地方(RouteConfig)更改URL映射,并且任何控制器和操作重新分解并不意味着您需要更新每个链接。

我喜欢NancyFx的简单性和开箱即用的IoC,但我不确定为什么NanxyFx不支持反向路由(根据动作名称生成URL)所以有可能为它创建一些静态类型帮助器。

任何想法如何在NancyFx中实现它或为什么如果不可能,为什么呢?

2 个答案:

答案 0 :(得分:3)

接受的答案是正确的,但现在有Linker

它没有开箱即用的解析表达式,但它基本上从属性名称 - 值对(如RouteValueDictionary)中提取参数,因此添加从表达式树中提取参数的支持不应该是太难了。

答案 1 :(得分:1)

路由未在Nancy中命名,因此目前无法实现此类功能。

但如果你发现自己正在改变路线,那么我认为你有一个更大的问题开始,个人这个很棒的功能(或者你目前的情况不足)让我更多地思考我正在制作我的路线,所以我现在很少,如果有的话,需要改变我的路线。

如果我确实需要重命名路线,“全部查找”可以很快修复。