4

私は自分のWebフォームプロジェクトにナンシーを実装しようとしています。私はこのガイドを読みました: 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見つかりません(小さなトロール画像とすべて)

編集*「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が提供したリンクは、ナンシーを成功に導くための優れたリソースです。ここに再びあります: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>

ナンシーのフォルダ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あるため、その下のURLはすべてNancyによって処理されますが、ルートで定義されている他のすべてのURLは引き続きASP.NetWebフォームで機能します。

この場合、問題はハンドラーを<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>

これにより、その場所で呼び出すすべてのリクエスト(によって定義される)をナンシーが処理できるようになります。path="*"/nancy

この情報は、既存のサイトへのナンシーの追加の下にリンクしたリンクにあります。

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

^特定の見出しへの直接リンク。

于 2014-01-15T14:40:48.497 に答える