Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 虚拟目录中的ASP.NET MVC_C#_Asp.net Mvc_Model View Controller_Iis 5 - Fatal编程技术网

C# 虚拟目录中的ASP.NET MVC

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

我的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 = "" }
);
我的搜索控制器看起来像这样

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解决了这个问题。然后,它对和都适用。如果你想删掉最后一段,我会把你的答案标记为接受。