我想为 URL 设置一个默认参数,以便当用户自己发送参数时,例如:
该参数首先(不可见地)路由到 SomeController/SomeAction/ID=argument,然后,如果没有找到 404 或 301。
我希望 global.asax RegisterRoutes 将具有此功能。任何帮助将不胜感激。
我想为 URL 设置一个默认参数,以便当用户自己发送参数时,例如:
该参数首先(不可见地)路由到 SomeController/SomeAction/ID=argument,然后,如果没有找到 404 或 301。
我希望 global.asax RegisterRoutes 将具有此功能。任何帮助将不胜感激。
您可以设置一个路由来执行此操作,但它会干扰 MVC 设置的“通用”方式:
routes.MapRoute(
name: "ControllerlessRoute",
url: "{id}",
defaults: new { controller = "SomeController", action = "SomeAction" }
);
将“/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();
}