如何将查询字符串映射到MVC中的操作方法参数?

时间:2017-01-31 23:03:14

标签: asp.net-mvc asp.net-mvc-routing

我有一个网址http://localhost/Home/DomSomething?t=123&s=TX,我想将此网址路由到以下操作方法

public class HomeController
{
   public ActionResult DoSomething(int taxYear,string state)
   {
      // do something here
   }
}

由于查询字符串名称与操作方法的参数名称不匹配,因此请求不会路由到操作方法。

如果我将网址(仅用于测试)更改为http://localhost/Home/DomSomething?taxYear=123&state=TX,那么它的工作原理。 (但我没有权限更改请求。)

我知道我可以对操作方法应用Route属性,并且可以将t映射到taxYearsstate

但是我没有为此映射找到Route属性的正确语法,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:10)

选项1

如果查询字符串参数始终为 t s ,则可以使用前缀。请注意,它不再接受 taxYear

http://localhost:10096/home/DoSomething?t=123&s=TX

public ActionResult DoSomething([Bind(Prefix = "t")] int taxYear, 
   [Bind(Prefix = "s")] string state)
{
    // do something here
}

选项2

如果要接受这两个URL,则声明所有参数,并手动检查哪个参数具有值 -

http://localhost:10096/home/DoSomething?t=123&s=TX
http://localhost:10096/home/DoSomething?taxYear=123&state=TX

public ActionResult DoSomething(
    int? t = null, int? taxYear = null, string s = "",  string state = "")
{
    // do something here
}

选项3

如果您不介意使用第三方软件包,可以使用ActionParameterAlias。它接受这两个网址。

http://localhost:10096/home/DoSomething?t=123&s=TX
http://localhost:10096/home/DoSomething?taxYear=123&state=TX

[ParameterAlias("taxYear", "t")]
[ParameterAlias("state", "s")]
public ActionResult DoSomething(int taxYear, string state)
{
    // do something here
}