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

时间:2015-06-07 15:34:57

标签: iis-7.5 nancy 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的正确方法是什么?

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

由于生产部署不在虚拟目录中,因此不会成为生产问题。

1 个答案:

答案 0 :(得分:2)

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

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

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

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