1

我想为 URL 设置一个默认参数,以便当用户自己发送参数时,例如:

http://mysite.com/argument

该参数首先(不可见地)路由到 SomeController/SomeAction/ID=argument,然后,如果没有找到 404 或 301。

我希望 global.asax RegisterRoutes 将具有此功能。任何帮助将不胜感激。

4

2 回答 2

3

您可以设置一个路由来执行此操作,但它会干扰 MVC 设置的“通用”方式:

routes.MapRoute(
    name: "ControllerlessRoute",
    url: "{id}",
    defaults: new { controller = "SomeController", action = "SomeAction" }
);
于 2012-10-29T20:35:25.100 回答
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();
}
于 2012-10-29T20:42:46.583 回答