使用基于ASP.NET MVC属性的路由映射器

时间:2010-06-20 03:52:28

标签: c# asp.net asp.net-mvc attributes asp.net-mvc-routing

在我的ASP.NET MVC应用程序中,我想使用this ASP.NET MVC Attribute Based Route Mapper,首先宣布here

到目前为止,我了解如何实现使用它的代码,但我遇到了一些问题,我认为过去使用过这种基于属性的路由映射器的人将能够回答。

  • 如何将其用于HTTP POST的ActionResults?换句话说,它如何与表单提交等一起使用?我应该只放入GET方法的网址,还是应该使用GET方法网址而不使用任何参数(如HTTP POST中没有通过网址传入)?
  • 如何将其与“网址查询字符串参数”一起使用?是否可以将属性配置为映射到/controller/action?id=value而不是/controller/action/{id}等路线?

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

如何将其与ActionResults一起使用   适用于HTTP POST?

您使用[HttpPost]属性装饰要发布到的操作:

[Url("")]
public ActionResult Index() { return View(); }

[Url("")]
[HttpPost]
public ActionResult Index(string id) { return View(); }

如果您决定为POST操作指定其他名称:

[Url("")]
public ActionResult Index() { return View(); }

[Url("foo")]
[HttpPost]
public ActionResult Index(string id) { return View(); }

您需要在辅助方法中提供此名称:

<% using (Html.BeginForm("foo", "home", new { id = "123" })) { %>

  

如何将其与“URL查询字符串”一起使用   参数“?

查询字符串参数不是路由定义的一部分。您始终可以在控制器操作中将其作为操作参数或从Request.Params获取。

id参数而言,它是在Application_Start中配置的,因此如果您希望它出现在查询字符串中而不是路由的一部分,只需将其从此路由定义中删除:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoutes();
    routes.MapRoute(
        "Default",
        "{controller}/{action}",
        new { controller = "Home", action = "Index" }
    );
}