Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running an ASP.NET MVC app from a virtual directory in IIS7

Is it possible to run an MVC application from a virtual directory in IIS7? I have built an open source utility app in ASP.NET MVC3 and wondering if that was a mistake; it likely is if the site cannot be run from a virtual directory.

Take a simple default route of /home/index if running from a virtual directory named /app, will actually be /app/home index. Which kind of messes things up for routing.

I don't want a user to have to change routes and recompile the project to use the app in a virtual directory. Is there a way to change a configuration parameter to indicate what the root folder of what the application is?

like image 666
Brettski Avatar asked Jun 15 '11 15:06

Brettski


2 Answers

Is it possible to run an MVC application from a virtual directory in IIS7?

Not only that it is possible but it is the preferred way.

Which kind of messes things up for routing.

Not if you use Html helpers when dealing with urls which will take care of this.

Here's a typical example of what you should never do:

<script type="text/javascript">
    $.ajax({
        url: '/home/index'
    });
</script>

and here's how this should be done:

<script type="text/javascript">
    $.ajax({
        url: '@Url.Action("index", "home")'
    });
</script>

Here's another typical example of something that you should never do:

<a href="/home/index">Foo</a>

and here's how this should be written:

@Html.ActionLink("Foo", "Index", "Home")

Here's another example of something that you should never do:

<form action="/home/index" method="opst">

</form>

and here's how this should be written:

@using (Html.BeginForm("Index", "Home"))
{

}

I think you get the point.

like image 122
Darin Dimitrov Avatar answered Nov 05 '22 08:11

Darin Dimitrov


Yes, that works fine, and no, it doesn't mess up routing. However, the app you're running may be buggy and not support that configuration.

You don't need a "configuration parameter," because IIS and ASP.NET already handle this correctly.

You do, however, need to avoid hard-coded URIs in your views.

E.g., do this:

<img src="<%: Url.Content("~/Content/Images/Image.png") %>" />

...instead of:

<img src="/Content/Images/Image.png" />

...and similarly for links and style sheet references.

like image 26
Craig Stuntz Avatar answered Nov 05 '22 08:11

Craig Stuntz