C# 如何将MVC操作参数重新映射到另一个参数名称?
我必须实现一个MVC操作,调用方式如下:C# 如何将MVC操作参数重新映射到另一个参数名称?,c#,.net,asp.net-mvc-3,C#,.net,Asp.net Mvc 3,我必须实现一个MVC操作,调用方式如下: http://address/Controller/MyAction?resName=name ActionResult MyAction( String resName ) { ActionResult MyAction( [Bind(Include="resName")] String resourceName ) 它由硬编码为passresName的第三方调用。因此,天真的做法是采取如下行动: http://address/Controlle
http://address/Controller/MyAction?resName=name
ActionResult MyAction( String resName )
{
ActionResult MyAction( [Bind(Include="resName")] String resourceName )
它由硬编码为passresName
的第三方调用。因此,天真的做法是采取如下行动:
http://address/Controller/MyAction?resName=name
ActionResult MyAction( String resName )
{
ActionResult MyAction( [Bind(Include="resName")] String resourceName )
但是我认为有一个名为resName
的参数是不酷的,我更希望它名为resourceName
。如果我只是重命名参数,MVC参数映射将不再工作,并且在调用我的操作时,我总是将resourceName
设置为null
我像这样尝试了BindAttribute
:
http://address/Controller/MyAction?resName=name
ActionResult MyAction( String resName )
{
ActionResult MyAction( [Bind(Include="resName")] String resourceName )
但是每次调用我的操作时,resourceName
仍然是null
如何重新映射参数名?
前缀是您需要的:
ActionResult MyAction( [Bind(Prefix="resName")] String resourceName )
但是,执行http://address/Controller/MyAction?resourceName=name
无法使用该设置。另一个选项是使用库。它的好处是,给定参数的两个名称都可以使用
e、 g
然后调用控制器,如http://address/Controller/MyAction?resourceName=name
和http://address/Controller/MyAction?resName=name
两者都可以正常工作。不幸的是,如果在应用程序中的某个位置使用DateTime类型的属性并注册全局筛选器,ActionParameterAlias将失败。筛选器正在遍历所有属性及其属性等和DateTime。Date的类型为DateTime,这会导致无休止的递归。可能发生在递归使用类的任何层次结构中。使用nuget软件包会在没有说明问题所在的情况下终止应用程序,因此在当前版本(6.0.0)中使用该软件太危险且不稳定。