如何将MVC操作参数重新映射到另一个参数名称?

时间:2013-04-04 11:50:57

标签: c# .net asp.net-mvc-3

我必须实现一个像这样调用的MVC动作:

http://address/Controller/MyAction?resName=name

并且由硬编码传递resName的第三方调用。所以天真的方式就是采取这样的行动:

ActionResult MyAction( String resName )
{

但我认为有一个名为resName的参数是不酷的,我更喜欢让它命名为resourceName。如果我只重命名参数MVC参数映射不再有效,并且在调用我的操作时,我始终将resourceName设置为null

我试过BindAttribute这样:

ActionResult MyAction( [Bind(Include="resName")] String resourceName )

但每次调用我的操作时resourceName仍为null

如何重新映射我的参数名称?

2 个答案:

答案 0 :(得分:46)

Prefix就是您所需要的:

ActionResult MyAction( [Bind(Prefix="resName")] String resourceName )

但是,执行http://address/Controller/MyAction?resourceName=name将无法使用该设置。

答案 1 :(得分:10)

另一种选择是使用ActionParameterAlias库。关于它的好处是给定参数的两个名称都可以工作。

e.g。

using ActionParameterAlias;
//...

    [ParameterAlias("resourceName", "resName", Order = 1)]
    ActionResult MyAction( String resourceName )

然后调用http://address/Controller/MyAction?resourceName=name http://address/Controller/MyAction?resName=name之类的控制器都可以正常工作。