4

我一直在尝试在我的 webforms 项目中实现 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>

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

<?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未找到(小巨魔图像和所有)

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

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

问候疯子

4

3 回答 3

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

于 2012-07-01T04:03:41.410 回答
1

你记得在你的根 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/*/*/*">
    
于 2012-08-08T04:48:11.303 回答
0

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

如果是这种情况,问题是您需要将处理程序包装在<location>标签中:

<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 处理在该位置下调用的所有请求(由 定义)。path="*"/nancy

此信息可在将 Nancy 添加到现有站点下链接到的链接中找到

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

^ 直接链接到特定标题。

于 2014-01-15T14:40:48.497 回答