我的项目中有一个名为' Reports'的问题。当我尝试从该区域访问某些控制器时,我总是遇到404错误。当我在本地IIS(Windows 8.1)上运行我的应用程序时,只会出现此问题。在其他机器(Windows 7和本地IIS)上一切正常。即使在这台Windows 8.1机器上,但IIS Express一切运行良好。
我试图清除临时文件,但没有结果。
区域被注册如下:
public class ReportsAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Reports";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Reports_default",
"Reports/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
在Global.asax中,Application_start()方法:
AreaRegistration.RegisterAllAreas();
我不知道问题出在哪里。你有什么想法吗?
答案 0 :(得分:1)
试试这个:
public class ReportsAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Reports";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Reports_main",
"Reports/{controller}/{action}/{id}",
new { area = "Reports", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
context.MapRoute(
"Reports_default",
"Reports/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
Reports_default
路由规则将Index
设置为给定控制器的默认操作。
您需要添加另一个Reports_main
规则,当您访问该区域的根目录时,该规则将设置默认控制器,例如/Reports
。在此规则中,我假设默认控制器为Home
,但您可以更改它以适合您的项目。
答案 1 :(得分:1)
Visual Studio的默认AreaRegistration
脚手架不包含controller
的默认值,这意味着需要在URL中提供控制器。
/Reports/Home // This works (if you have a home controller)
/Reports // This doesn't work
要使控制器可选,您需要提供默认值。
public class ReportsAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Reports";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Reports_default",
"Reports/{controller}/{action}/{id}",
// Note that controller is defaulted to Home
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
另请注意,注册路由的顺序与为整个应用程序执行的顺序相同。通常,这意味着您必须在致电AreaRegistration.RegisterAllAreas()
之前致电RouteConfig.RegisterRoutes(RouteTable.Routes)
。
Tasos提供的答案也可以,但配置错误:
AreaRegistration
中的默认区域是多余且不必要的。Reports_default
在他的示例中是一个无法访问的执行路径,这使得它也是多余的和不必要的。答案 2 :(得分:0)
检查事件查看器。我遇到了这个问题,“报告”URL是一个与SQL Server Reporting Services有关的虚拟目录。