开发者

how to route to css/js files in mvc.net

开发者 https://www.devze.com 2023-03-26 16:07 出处:网络
I am trying to add an area to my application using routing in mvc.net. For controllers i added: routes.MapRoute(

I am trying to add an area to my application using routing in mvc.net. For controllers i added:

routes.MapRoute(
                "Area1", // Route name
                "Area1/{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter de开发者_开发问答faults
            );

how can i route the css/js files in the same way, i.e. i would like to have area1/content/site.css going to /content/site.css or to /content/area1/site.css.

Thanks


like this

for /content/site.css

if you want to always goto site.css:

routes.MapRoute(
                "Area1", // Route name
                "/{action}/site.css", // URL with parameters
                new { controller = "Area1", action = "content" } // Parameter defaults
            );

and if you want to goto different css by providing css name:

routes.MapRoute(
                "Area1", // Route name
                "/{action}/{resource}.css", // URL with parameters
                new { controller = "Area1", action = "content", resource = UrlParameter.Optional } // Parameter defaults
            );

for /content/area1/site.css

routes.MapRoute(
                    "Area1", // Route name
                    "/{action}/Area1/{resource}.css", // URL with parameters
                    new { controller = "Area1", action = "content", resource = UrlParameter.Optional } // Parameter defaults
                );


I did not find a way of doing this with mvc routing what i ended up doing is: I ran this code in a http module:

void context_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication Application = sender as HttpApplication;

            var match = r.Match(Application.Request.Url.AbsolutePath);
            if (match.Success)
            {
                var fileName = match.Groups[2].Value;
                Application.Context.RewritePath("/" + fileName);
            }
        }

r is a regex in my case:

private readonly Regex r = new `Regex("^/gmail(/canvas)?/((content|scripts|images|tinymce).*)$", RegexOptions.IgnoreCase);`

in global.asax i added:

routes.IgnoreRoute("{*staticfile}", new { staticfile = @".*\.(css|js|gif|jpg)(/.*)?" });

to prevent mvc.net from routing these requests.

one might also have to set iis6/iis7 to route requests to static files through mvc.net but i forgot the details.

I picked this method up from several posts that i cannot remember so i apologize that i cannot give proper credit.

0

精彩评论

暂无评论...
验证码 换一张
取 消