我正在尝试创建一个重定向到网址的路由,但无法让它在我的生活中工作。这是我到目前为止所做的:
public class GoAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Go";
}
}
public override void RegisterArea( AreaRegistrationContext context )
{
context.MapRoute(
"Go/Issues",
"go/issues/{issueID}",
new { controller = "Go", action = "GoIssues" },
new { issueID = @"\d+" }
);
}
}
和我的控制员:
public class GoController : Controller
{
public ActionResult GoIssues( int issueID )
{
var version = getVersion( issueID );
if( version != null )
{
string url = MakeUrl(version, issueID);
// Redirect to the right url
return Redirect( url );
}
}
// not found
return HttpNotFound();
}
}
这一点的重点是确定要重定向到的正确版本以及重定向到那里。但由于某种原因,go / issues / 123给了我404未找到。我使用了路由调试工具,它显示此路由被命中但是当我禁用它时,我又回到了404.
非常感谢任何帮助。
由于
答案 0 :(得分:1)
尝试将您的路线放在全局路线配置中而不是区域注册,看看是否有效。
我已尝试在我的测试项目中使用您的配置,它运行正常。如果这仍然不起作用,我建议从小处开始使其工作,然后慢慢地将路线配置添加到它上面,直到它断开。
答案 1 :(得分:0)
如果其他人遇到同样的问题,我找到了答案。
经过大量谷歌搜索,我发现以下文章解释了路由的工作原理。
http://blog.davebouwman.com/2011/12/08/asp-net-mvc3-and-404s-for-area-controllers/
文章说ASP.NET期望命名空间是某种格式:
问题是我的控制器上的命名空间。事实证明,MVC有一个约定,即区域名称应该在控制器的命名空间中。
所以 - 我有StatsMe.API.CategoriesController,但MVC正在寻找StatsMe.Areas.API.CategoriesController。
最终让我失望的是RouteDebugger输出中的一些内容......
烦人,因为错误信息确实可以通过说“嘿 - 我正在寻找StatsMe.Areas.API.CategoriesController而我找不到它”,而不是它吐出来的非常通用的消息。 / p>