你如何告诉 Nancy 重定向到虚拟目录中的 URL?

How do you tell Nancy to redirect to a URL inside a virtual directory?

我是 运行 我开发机器上虚拟目录中的 Nancy 应用程序,我有静态内容在工作,但如果模块重定向浏览器,那么 URL 被发回不正确。

如果结果是:

return new RedirectResponse("/");

然后浏览器重定向到 http://localhost/ 而不是虚拟目录的根目录。

如果我尝试

return new RedirectResponse("~/");

我被带到 http://localhost/MyVirtualDirectory/action/~/,其中至少包括虚拟目录,但其余的都搞砸了。

我应该指出模块是这样创建的...

public abstract class ActionRootModule : NancyModule
{
    protected ActionRootModule() : base("/action/") { }
}

public class SendEmailModule : ActionRootModule
{
    public SendEmailModule()
    {
        // Parts missing for brevity....
        Post["/send-email/"] = o => PostSendEmail(o);
    }

    private dynamic PostSendEmail(dynamic o)
    {
        // Do stuff...
        return new RedirectResponse("~/");
    }
}

告诉 Nancy 重定向到虚拟目录中的特定 URL 的正确方法是什么?

我 运行 Visual Studio 使用 Windows 7 和 IIS 7.5(不是 IIS Express - 因为我有来自第三方的传入流量进行回调)

这不会成为生产环境的问题,因为生产环境部署不会在虚拟目录中。

有两种方法可以解决这个问题。

1) 使用return Response.AsRedirect("~/");

2) 使用return new RedirectResponse(Context.ToFullPath("~/"));

第一个选项只是对第二个选项的方便包装,因此无论哪种方式都会产生相同的结果 (https://github.com/NancyFx/Nancy/blob/85dfe8567d794ff3e766521a9fa0891832d4fc8a/src/Nancy/FormatterExtensions.cs#L51)。对 ToFullpath() 的调用会更正您在重定向的 URL.

中看到的 /~/