0

我正在尝试设置 nancy 来处理我的 mvc 3 应用程序中对 /api url 的请求。

我在我的 ApiModule 中设置了 2 个 nancy 路由

获取["/"] = _ => "你好"; // 按预期返回“Hello”

获取["/newsletter/signup"] = _ => "ddddd"; // 返回一个 asp.net 404。不是预期的。

/newsletter/signup/test 返回一个 nancy 404。

我已经检查了配置并多次重新启动了应用程序,但我无法让它正常工作。

编辑:这是涉及的代码和配置

public class ApiModule : NancyModule
{
    private readonly INewsletterSubscriberRepository _newsletterSubscriberRepository;

    public ApiModule(INewsletterSubscriberRepository newsletterSubscriberRepository) : base("/api")
    {
        _newsletterSubscriberRepository = newsletterSubscriberRepository;


        Get["/newsletter/signup"] = _ => "ddddd";

        Get["/"] = _ => "Hello";
    }
}

base.web.config

    <httpHandlers>
      <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="api/*" />
      <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
    </httpHandlers>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>
    <handlers>
      <add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="api/*" />
      <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
    </handlers>
  </system.webServer>

我创建了一个 api 文件夹并将这个 web.config 放在那里

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

3 回答 3

2

这都应该在 Wiki 中涵盖:

https://github.com/NancyFx/Nancy/wiki/Hosting-nancy-with-asp.net

于 2012-02-06T07:56:01.590 回答
1

我在创建 MVC 4.0 网站时遇到了同样的问题:

"api/{controller}/{id}"这个问题是默认的 MVC 模板在你的WebAPIConfig.cs文件中设置了一个路由。

您需要删除/更改此路由,否则它将窃取所有请求/api/xxxx

更改此文件,使其如下所示:

public static void Register(HttpConfiguration config)
{

}

那应该可以解决您的问题。

于 2013-01-29T13:33:38.587 回答
0

它抛出 404 (NotFound) 因为您没有可以接受“/newsletter/signup/test”的路由。

为了纠正这个问题,而不是

Get["/newsletter/signup"]

将其替换为

Get["/newsletter/signup/{param}"]

该路由有一个捕获段 {param},它捕获传递到所请求 URL 的给定段中的任何内容,然后将其传递到路由的 Action 中。您可以参考本指南以获取有关在 Nancy 中定义路由的更多信息。

于 2017-06-24T10:34:07.850 回答