2013-04-30 2 views
3

Я раньше не использовал httpHandlers в MVC. Однако я хочу остановить сеанс синхронизации в моем приложении. Я нашел решение здесь; http://www.dotnetcurry.com/ShowArticle.aspx?ID=453Как вызвать HttpHandler через JQuery в MVC

Однако с моей implimentation я получаю сообщение об ошибке

Контроллер для пути '/Shared/KeepSessionAlive.ashx' не был найден или не реализует IController

Так JQuery;

$.post("/Shared/KeepSessionAlive.ashx", null, function() { 
    $("#result").append("<p>Session is alive and kicking!<p/>"); 
}); 

ищет контроллер. Как это остановить и выполнить код обработчика?

Я попытался положить это в свой web.config;

<httpHandlers> 
    <add verb="*" path="KeepSessionAlive.ashx" type="XXXXXX.Views.Shared.KeepSessionAlive"/> 
</httpHandlers> 

ответ

3

Try игнорируя .ashx файлы в маршрутах, так MVC не будет пытаться и этот маршрут к действию контроллера:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.IgnoreRoute("Shared/{resource}.ashx/{*pathInfo}"); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

Это приведет к MVC маршрутизации игнорировать .ashx файлы в/общий /; однако он не будет работать для файлов .ashx в других местах. Если вы хотите, чтобы он работал во всех подкаталогах, попробуйте вместо этого (кредит this answer для этого трюка):

routes.IgnoreRoute("{*allashx}", new { allashx = @".*\.ashx(/.*)?" }); 

 Смежные вопросы

  • Нет связанных вопросов^_^