我想为URL设置一个默认参数,以便当用户自己发送参数时,例如:
该参数首先被(无形地)路由到SomeController / SomeAction / ID =参数,然后,如果没有找到404或301。
我希望global.asax RegisterRoutes具有此功能。任何帮助将不胜感激。
答案 0 :(得分:3)
您可以设置一个路由来执行此操作,但它会干扰MVC设置的“通用”方式:
routes.MapRoute(
name: "ControllerlessRoute",
url: "{id}",
defaults: new { controller = "SomeController", action = "SomeAction" }
);
答案 1 :(得分:2)
将“/ argument”路由到您的操作,并根据您的需要返回有趣的视图或404/301/302结果:
routes.MapRoute(
name: "ControllerlessRoute",
url: "{id}",
defaults: new { controller = "SomeController", action = "SomeAction" }
);
class SomeController{
ActionResult SomeAction(id)
{
if (NotFound)
{
return Custom404View();
}
else if (NeedRedirect)
{
return new Custom301View{Url:RedrectUrl};
}
return View();
}
}
可以找到自定义301视图的示例http://forums.asp.net/p/1337938/2700733.aspx。
public string Url { get; set; }
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.StatusCode = 301;
context.HttpContext.Response.RedirectLocation = Url;
context.HttpContext.Response.End();
}