2016-02-29 4 views
0

У меня есть этот JS-код:Изменение файла ответов в ASP .NET MVC

$.post("[MyRouteName]", data, callback); 

И у меня есть маршрут в моей ASP .NET приложения:

routes.MapRoute(
       "MyRouteName", 
       "myrouteurl", 
       new { controller = "Foo", action = "Bar", id = "" } 
      ); 

Я помню, что я могу заставить ASP. NET MVC для замены [MyRouteName] с myrouteurl, когда запрашивается файл, содержащий JS, но я не могу точно помнить, какой компонент мне нужно переопределить. Может кто-нибудь мне помочь?

+0

Извините, но вы ошибаетесь. Вы должны указать «myrouteurl», а не имя маршрута в файле javascript. –

+0

@RobertoConteRosito Я реализовал это, проверьте ответ, если вам интересно. –

ответ

0

Я достиг этого результата. Для реализации этого я написал свой собственный HttpHandler:

public class JsRoutingHttpHandler : IHttpHandler 
{ 
    public JsRoutingHttpHandler() 
    { 

    } 

    public bool IsReusable 
    { 
     get { return true; } 
    } 

    public void ProcessRequest(HttpContext context) 
    { 
     var phisicalPath = context.Server.MapPath(context.Request.AppRelativeCurrentExecutionFilePath); 
     var file = File.ReadAllLines(phisicalPath); 
     var routeCatchRegex = new Regex(@"\[Route:([a-zA-Z]+)\]"); 
     for (int index = 0; index < file.Length; index++) 
     { 
      var line = file[index]; 
      var matches = routeCatchRegex.Matches(line); 
      foreach (Match match in matches) 
      { 
       var routeName = match.Groups[1]; 
       var url = "ERROR[NO ROUTE FOUND]"; 
       if (Resolver.RouteUrl.ContainsKey(routeName.Value)) 
       { 
        url = Resolver.RouteUrl[routeName.Value]; 
       } 
       line = line.Replace(match.Value, url); 
      } 
      context.Response.Output.WriteLine(line); 
     } 
    } 
} 

Тогда я зарегистрировал его в Web.config:

<system.webServer> 
    <handlers> 
     <add verb="*" path="*.js" resourceType="File" name="JsRoutingHandler" type="AAYW.Core.Web.HttpHandler.JsRoutingHttpHandler"/> 
    </handlers> 
    </system.webServer> 

А потом я проверил это и достигается эффект, который я хотел: файл, что у меня есть:

$(window).load(function() { 
    var a = "[Route:SaveEntity]"; 
}); 

И Файл, который я получил:

$(window).load(function() { 
    var a = "admin/entity/save"; 
}); 

Надеюсь, это может помочь кому-то!

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