C# 虚拟目录中的ASP.NET MVC
我的Global.asax.cs中有以下内容C# 虚拟目录中的ASP.NET MVC,c#,asp.net-mvc,model-view-controller,iis-5,C#,Asp.net Mvc,Model View Controller,Iis 5,我的Global.asax.cs中有以下内容 routes.MapRoute( "Arrival", "{partnerID}", new { controller = "Search", action = "Index", partnerID="1000" } ); routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", actio
routes.MapRoute(
"Arrival",
"{partnerID}",
new { controller = "Search", action = "Index", partnerID="1000" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
我的搜索控制器看起来像这样
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的虚拟目录
如果我将浏览器指向,则会按预期显示1000。但是,如果我尝试,我会得到一个页面未找到错误。有什么想法吗
在虚拟目录中运行MVC有什么特别的注意事项吗?在应用程序中使用虚拟目录时有许多注意事项
一个特别之处是,大多数浏览器不会将来自一个虚拟目录的cookie提交到另一个虚拟目录,即使应用程序驻留在同一台服务器上 尝试设置虚拟路径:右键单击mvc项目、属性、web选项卡,在那里输入适当的位置。如果您在Windows XP上执行此操作,则您使用的是IIS 5.1。您需要使用ASP.Net来处理您的请求。您需要将扩展添加到路由({controller}.mvc/{action}/{id}),并将该扩展映射到ASP.Net,或者将所有请求映射到ASP.Net。这是因为它转到Default.aspx,这在MVC项目中是专门处理的
此外,还需要指定。如果要指定ID,则控制器和操作块不是可选的。IIS 5.1解释您的url,使其在名为Test的文件夹下查找名为1000的文件夹。为什么会这样 发生这种情况是因为只有IIS 6 当ASP.NET看到 在URL中的“文件扩展名”是 映射到aspnet_isapi.dll(这是一个 C/C++ISAPI过滤器负责 调用ASP.NET)。因为路由是一个 调用.NET IHTTP模块 UrlRoutingModule,它没有 除非ASP.NET本身 调用,仅当 将调用aspnet_isapi.dll,其中 只有在中有.aspx时才会发生 URL。所以,不,aspx,不 UrlRoutingModule,因此是404 最简单的解决方案是: 如果你不介意的话,在你的 URL,只需通过您的路由 配置,将.aspx添加到 在每个模式中使用正斜杠。对于 例如,使用 {controller}.aspx/{action}/{id}或 myapp.aspx/{controller}/{action}/{id}。 不要将.aspx放在 将参数名称用花括号括起来,或插入 “默认”值,因为它不是 实际上是控制器名称的一部分- 它只是在URL中满足IIS
资料来源:那么否决票的原因是什么?因为上述情况确实是一个特殊的考虑因素。我没有投反对票,但你的特殊考虑是所有web应用程序的共同点,OP专门询问了ASP.NET MVC。换句话说,你的答案虽然在技术上是正确的,但并没有回答这个问题。谢谢你的回答。这确实是IIS5.x的一个问题,我实际上已经通过使用VisualStudioDevelopmentServer解决了这个问题。然后,它对和都适用。如果你想删掉最后一段,我会把你的答案标记为接受。