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中实现它或为什么如果不可能,为什么呢?
答案 0 :(得分:3)
接受的答案是正确的,但现在有Linker。
它没有开箱即用的解析表达式,但它基本上从属性名称 - 值对(如RouteValueDictionary
)中提取参数,因此添加从表达式树中提取参数的支持不应该是太难了。
答案 1 :(得分:1)
路由未在Nancy中命名,因此目前无法实现此类功能。
但如果你发现自己正在改变路线,那么我认为你有一个更大的问题开始,个人这个很棒的功能(或者你目前的情况不足)让我更多地思考我正在制作我的路线,所以我现在很少,如果有的话,需要改变我的路线。
如果我确实需要重命名路线,“全部查找”可以很快修复。