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

你说的曾经没有我的故事 提交于 2020-01-19 10:07:55

问题


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?


回答1:


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.




回答2:


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.




回答3:


as far as i know routes are all based on the application root, not the actual root, so think of them as beginning with ~/, not /




回答4:


Yes this works. And as long as you're using the helper methods to create action URLs (e.g. <%=Html.ActionLink(...) %> there is no need to reconfigure or recompile.



来源:https://stackoverflow.com/questions/6360175/running-an-asp-net-mvc-app-from-a-virtual-directory-in-iis7

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!