проблемы с использованием Нэнси для обработки запросов на вложенные папки в приложении MVC 3 - PullRequest
0 голосов
/ 06 февраля 2012

Я пытаюсь настроить nancy для обработки запросов к / api url в моем приложении mvc 3.

Я установил 2 маршрута nancy в моем ApiModule

Get ["/"] = _ =>" Привет ";// возвращает "Hello", как и ожидалось

Get ["/ 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>

Ответы [ 3 ]

2 голосов
/ 06 февраля 2012

Все это должно быть описано в вики:

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

1 голос
/ 29 января 2013

У меня была такая же проблема при создании веб-сайта MVC 4.0:

Эта проблема - шаблон MVC по умолчанию устанавливает маршрут к "api/{controller}/{id}" в вашем WebAPIConfig.cs файле.

Вам нужно удалить / изменить этот маршрут, иначе он украдет все запросы, идущие на /api/xxxx

Измените этот файл так, чтобы он выглядел так:

public static void Register(HttpConfiguration config)
{

}

Это должно решить вашу проблему.

0 голосов
/ 24 июня 2017

Выдает 404 (NotFound), потому что у вас нет маршрута, который может принять "/ newsletter / signup / test".

Чтобы исправить это, вместо

Get["/newsletter/signup"]

замените его на

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

У этого маршрута есть сегмент захвата {param}, который захватывает все, что передано в данныйсегмент запрошенного URL, а затем передает его в действие маршрута.Вы можете обратиться к этому гиду для получения дополнительной информации об определении маршрутов в Нанси.

...