2012-02-06 2 views
0

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

Я создал 2 Nancy маршруты в моем ApiModule

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

Получить ["/ newsletter/signup"] = _ => "ddddd"; // возвращает asp.net 404. Не ожидается.

/бюллетень/регистрация/тест возвращает Nancy 404.

Я проверил конфигурации и перезагрузки приложения много раз, но я не могу заставить его работать правильно.

EDIT: Вот вовлеченный код и конфигурации

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> 

Я создал папку апи и поместить этот web.config там

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

ответ

2

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

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

+0

Я выполнил каждый шаг в разделе «Добавление Нэнси в существующий сайт». Он работает по пути «/», но не по пути «/ newsletter/signup» – terjetyl

+0

@TT вы можете добавить свою настройку web.config и класс модуля к вопросу, пожалуйста, очевидно, что что-то не так с тем, как вы обращаетесь на пути, если вы получаете Nancy 404. –

+0

Я обновил вопрос – terjetyl

1

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

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

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

Изменить этот файл, так что это выглядит следующим образом:

public static void Register(HttpConfiguration config) 
{ 

} 

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

0

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

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

Get["/newsletter/signup"] 

заменить его

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

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