虚拟目录中的ASP.NET MVC
本文关键字:ASP NET MVC 虚拟 | 更新日期: 2023-09-27 17:47:48
我的Global.asax.cs 中有以下内容
routes.MapRoute(
"Arrival",
"{partnerID}",
new { controller = "Search", action = "Index", partnerID="1000" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
我的SearchController看起来像这个
public class SearchController : Controller
{
// Display search results
public ActionResult Index(int partnerID)
{
ViewData["partnerID"] = partnerID;
return View();
}
}
Index.aspx只是显示ViewData["partnerID"]。
我在Windows XP上的IIS中设置了一个名为Test的虚拟目录。
如果我将浏览器指向http://localhost/Test/然后我得到1000显示如预期。但是,如果我尝试http://localhost/Test/1000我收到一个找不到页面的错误。有什么想法吗?
在虚拟目录中运行MVC有什么特别的注意事项吗?
IIS 5.1解释您的url,以便在名为Test的文件夹下查找名为1000的文件夹。为什么会这样?
发生这种情况是因为仅IIS 6当它看到URL中的"文件扩展名"映射到aspnet_isapi.dll(它是C/C++ISAPI筛选器负责调用ASP.NET)。由于路由是调用了.NET IHttpModuleUrlRoutingModule,它没有除非ASP.NET本身调用,只有当aspnet_isapi.dll被调用只有当中有.aspx时才会发生URL。所以,没有.aspx,没有UrlRoutingModule,因此是404。
最简单的解决方案是:
如果你不介意在你的URL,只需通过您的路由config,在每个图案中的正斜杠。对于示例,使用{controller}.aspx/{action}/{id}或myapp.aspx/{controller}/{action}/{id}。不要将.aspx放在花括号参数名称,或默认值,因为它不是实际上是控制器名称的一部分-它只是在URL中以满足IIS。
来源:http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/
如果您在Windows XP上执行此操作,那么您使用的是IIS 5.1。你需要让ASP.Net来处理你的请求。您需要向路由添加一个扩展({controller}.mvc/{action}/{id})并将该扩展映射到ASP.Net,或者将所有请求映射到ASP.Nethttp://localhost/Test之所以有效,是因为它进入了Default.aspx,这在MVC项目中是专门处理的。
此外,您需要指定http://localhost/Test/Search/Index/1000.如果要指定ID,则控制器和动作部件不是可选的。
在应用程序中使用虚拟目录时有许多注意事项。
其中一个特别之处是,即使应用程序位于同一服务器上,大多数浏览器也不会将来自一个虚拟目录的cookie提交给另一个。
尝试设置虚拟路径:右键单击mvc项目、属性、web选项卡,然后输入合适的位置。