南希重定向到当前模块下的路由

时间:2014-07-08 12:29:35

标签: nancy

我需要重定向到当前模块下的路径:

modulePath = "/test";  
Get["/there"] = ...  
Get["/here"] = routeParams => { return ????????????("/there"); } 

我希望“/ test / here”重定向到“/ test / there”

2 个答案:

答案 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;。该位置成为标识符。而且它并不脆弱。文件夹可以移动,重命名和嵌套。请注意命名空间对应!南希岩石。

enter image description here