asp.net mvc3可以Global.asax接受无控制器和无动作参数吗?

时间:2012-10-29 20:30:55

标签: asp.net asp.net-mvc-3 global-asax

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

http://mysite.com/argument

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

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

2 个答案:

答案 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();
}