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

sha*_*oth 35 .net c# asp.net-mvc-3

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

http://address/Controller/MyAction?resName=name
Run Code Online (Sandbox Code Playgroud)

它由硬编码传递的第三方调用resName.所以天真的方式是做这样的动作:

ActionResult MyAction( String resName )
{
Run Code Online (Sandbox Code Playgroud)

但我认为有一个名为resNameuncool 的参数,我更喜欢它的名字resourceName.如果我只是重命名参数MVC参数映射不再有效,我总是resourceName设置null为调用我的操作.

我试过BindAttribute这样的:

ActionResult MyAction( [Bind(Include="resName")] String resourceName )
Run Code Online (Sandbox Code Playgroud)

但每次调用我的动作时resourceName仍然如此null.

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

von*_* v. 49

Prefix 是你需要的:

ActionResult MyAction( [Bind(Prefix="resName")] String resourceName )
Run Code Online (Sandbox Code Playgroud)

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


jon*_*bot 10

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

例如

using ActionParameterAlias;
//...

    [ParameterAlias("resourceName", "resName", Order = 1)]
    ActionResult MyAction( String resourceName )
Run Code Online (Sandbox Code Playgroud)

然后调用控制器就好了http://address/Controller/MyAction?resourceName=name , http://address/Controller/MyAction?resName=name两者都可以正常工作.