2012-06-29 152 views
4

我一直在試圖在我的webforms項目上實現Nancy。我讀過這個指南: https://github.com/NancyFx/Nancy/wiki/Hosting-nancy-with-asp.netNancy爲ASP.NET webforms路由

我已經添加到了我的配置:

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

我創建了一個 '/南希' 文件夾web.config文件contaning:

<?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"; 
          }; 
    } 
} 

這工作時,ACC ''/ nancy/ok' 但是,當我將'Get [「/ ok」]'改爲'Get [「/ ok/ok']'並訪問'/ nancy/ok/ok'時, (小巨魔圖像和所有)

編輯* 如果我離開它 '獲得[ 「/ OK」]' 和接入/ OK/OK/OK,我得到 「確定」 回......

任何想法,爲什麼我不能做出更具體的路線?

問候的Mads

+0

如果你在某個模塊的ctor中放置了一個斷點,會發生什麼?調試時它停在那裏嗎? –

回答

0

由你想的網址/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> 

這使得(由path="*"定義)的位置/nancy下調用所有請求由南希處理。

這些信息可以在您鏈接到的鏈接中找到下增加南希到現有站點

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

^直接鏈接到特定的標題。

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

+0

葉,它的那個鏈接,應該是在我的第一篇文章後的第一篇文章之後。 https://github.com/NancyFx/Nancy/wiki/Hosting-nancy-with-asp.net但是,按照我的示例中所看到的那樣,該指南無法正常工作。這可能是一個IIS設置問題或某事,但我無法弄清楚:/ – MazeezaM

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> 

如果你的問題仍然存在,這裏的有些不優雅的解決方案:

  • 如果你想/南希/ 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/*/*/*">