【问题标题】:Nancy routing for ASP.NET webformsASP.NET 网络表单的 Nancy 路由
【发布时间】:2012-06-29 12:09:58
【问题描述】:

我一直在尝试在我的网络表单项目中实现 Nancy。我已阅读本指南: https://github.com/NancyFx/Nancy/wiki/Hosting-nancy-with-asp.net

我已将此添加到我的配置中:

<system.webServer>
    <handlers>
        <add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="nancy/*" />
    </handler>
</system.webServer>

我创建了一个包含 web.config 文件的“/nancy”文件夹:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <httpHandlers>
        <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*"/>
     </httpHandlers>
    </system.web>
</configuration>

我有以下 C# 代码:

public class TestApi : Nancy.NancyModule
{
    public TestApi()
        : base("/nancy")
    {
        Get["/ok"] = parameters =>
                            {
                                return "Ok";
                            };
    }
}

这在访问“/nancy/ok”时有效 但是当我将 'Get["/ok"]' 更改为 'Get["/ok/ok"]' 并访问 '/nancy/ok/ok' 时,我得到了 404 Not Found(小巨魔图像和所有)

编辑* 如果我把它留在 'Get["/ok"]' 并访问 /ok/ok/ok 我会得到 "Ok" 回来......

任何想法为什么我不能制定更具体的路线?

问候疯子

【问题讨论】:

  • 如果在某个模块的 ctor 中设置断点会发生什么?调试时会停在那里吗?

标签: asp.net webforms nancy


【解决方案1】:

我刚刚在测试中尝试过这个,我的路线没有问题。这是我的测试:

[TestFixture]
public class ScratchNancy
{
    [Test]
    public void RootTest()
    {
        var defaultNancyBootstrapper = new DefaultNancyBootstrapper();
        var browser = new Browser(defaultNancyBootstrapper);

        var result = browser.Get("/nancy/ok/ok", with => with.HttpRequest());

        Assert.AreEqual("It works!", result.Body.AsString());
    }

    public class RootModule : NancyModule
    {
        public RootModule() : base("/nancy")
        {
            Get["/ok/ok"] = p =>
                {
                    return Response.AsText("It works!");
                };
        }            
    }
}

@TheCodeJunkie 提供的链接是帮助 Nancy 取得成功的绝佳资源。又来了:https://github.com/NancyFx/Nancy/wiki/Hosting-nancy-with-asp.net

【讨论】:

  • 是的,它的那个链接,应该是在我的第一篇文章之后的第一行文字之后。 github.com/NancyFx/Nancy/wiki/Hosting-nancy-with-asp.net 但是按照那里的指南进行操作后,如我的示例所示,它将无法正常工作。这可能是 IIS 设置问题或其他问题,但我无法弄清楚:/
【解决方案2】:

你记得在你的根 web.config 中添加这个吗?

  <system.web>
    <httpHandlers>
      <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="nancy/*" />
    </httpHandlers>
  </system.web>

这部分在你的 nancy 文件夹 web.config 中吗?

<httpHandlers>
  <add path="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" verb="*"/>
</httpHandlers>

如果您的问题仍然存在,这里有一个不太优雅的解决方案:

  • 如果您想要 /nancy/ok/ok,请在您的 webconfig 中添加另一行:

    <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="nancy/*/*">
    
  • 如果你想要/nancy/ok/ok/ok,添加另一行:

    <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="nancy/*/*/*">
    

【讨论】:

    【解决方案3】:

    根据您希望在 url /nancy 下运行 Nancy 的路线判断,因此在该 URL 下的任何 url 都由 Nancy 处理,而在根目录上定义的任何其他内容都将继续在 ASP.Net Web 窗体下工作。

    如果是这种情况,问题是您需要将处理程序包装在 &lt;location&gt; 标记中:

    <location path="nancy">
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
        <httpHandlers>
          <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*"/>
        </httpHandlers>
      </system.web>
    
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        <validation validateIntegratedModeConfiguration="false"/>
        <handlers>
          <add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*"/>
        </handlers>
      </system.webServer>
    </location>
    

    这允许 Nancy 处理在位置 /nancy 下调用的所有请求(由 path="*" 定义)。

    您可以在将 Nancy 添加到现有网站

    下的链接中找到此信息

    https://github.com/NancyFx/Nancy/wiki/Hosting-nancy-with-asp.net#adding-nancy-to-an-existing-site

    ^ 指向特定标题的直接链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      相关资源
      最近更新 更多