How do I remap an MVC action parameter to another

2020-05-18 04:59发布

问题:

I have to implement an MVC action that is invoked like this:

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

and it's called by a third party that is hardcoded to pass resName. So the naive way is to have an action like this:

ActionResult MyAction( String resName )
{

but I think that having a parameter called resName is uncool and I'd prefer to have it name resourceName. If I just rename the parameter MVC parameter mapping no longer works and I always have resourceName set to null when my action is invoked.

I tried BindAttribute like this:

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

but resourceName is still null every time my action is invoked.

How do I remap my parameter name?

回答1:

Prefix is what you need:

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

However, doing a http://address/Controller/MyAction?resourceName=name won't work with that setup.



回答2:

Another option is to use the ActionParameterAlias library. The nice thing about it is that both names for a given parameter will work.

e.g.

using ActionParameterAlias;
//...

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

Then calls to the controller like http://address/Controller/MyAction?resourceName=name and http://address/Controller/MyAction?resName=name will both work just fine.