我需要重定向到当前模块下的路径:
modulePath = "/test";
Get["/there"] = ...
Get["/here"] = routeParams => { return ????????????("/there"); }
我希望“/ test / here”重定向到“/ test / there”
答案 0 :(得分:11)
您可以使用命名路由和Nancy.Linker。见https://github.com/horsdal/Nancy.Linker
这是来自NuGet的安装Nancy.Linker
,依赖IResourceLinker
并将代码更改为:
public class YourModule
{
public YourModule(IResourceLinker linker)
{
Get["theRoute", "/there"] = ...
Get["/here"] = Response.AsRedirect(linker.BuildAbsoluteUri(this.Context, "theRoute");
}
{
答案 1 :(得分:0)
你可以使用我的BaseModule。它可以让您将Web应用程序组织成松散耦合的单元,并在相同的文件夹中包含相关元素:模块,视图,静态资源。这是通过将模块的命名空间(项目名称的剪裁)注册为1)modulePath,2)视图的搜索位置和3)静态内容的允许位置来实现的。
因此,您(返回)拥有映射到项目文件夹结构的URL。您可能会一起工作,一起删除,共同生活的项目。构建事物链接大大简化了。因此,对于重定向,您将拥有文件夹结构
here |-module.cs |-there |-module.cs
并在你的"这里"模块return Response.AsRedirect("there/");
为此,模块应继承以下BaseModule,并且不要更改模块的默认命名空间。它映射到文件夹。
using Nancy;
using Nancy.Conventions;
using System;
using System.Text.RegularExpressions;
namespace HaciendaTestClient
{
// http://stackoverflow.com/questions/2287636/pass-current-object-type-into-base-constructor-call
public abstract class BaseModule<T> : NancyModule, IConvention
{
// the goal is to provide the folder path from the app root as the module path, to enable relative links to static content.
public BaseModule() : base(typeof(T).Namespace.Substring(typeof(T).Namespace.IndexOf('.')).Replace('.', '/'))
{
}
public void Initialise(NancyConventions conventions)
{
// This is where we register the top level directory containing the module as a root for static content.
var tlf = Regex.Match(typeof(T).Namespace, "(?<=\\.)[^\\.]*", RegexOptions.Singleline).Value;
var conv = StaticContentConventionBuilder.AddDirectory(tlf);
conventions.StaticContentsConventions.Add(conv);
}
public Tuple<bool, string> Validate(NancyConventions conventions)
{
return new Tuple<bool, string>(true, "no problem joe");
}
}
}
这是我的解决方案资源管理器的一个小屏幕截图,让您感兴趣。由于所有内容都是通过相对链接调用的,因此所有内容都可以调用&#34; _&#34;。该位置成为标识符。而且它并不脆弱。文件夹可以移动,重命名和嵌套。请注意命名空间对应!南希岩石。