为什么我不能通过操纵URL手动将ViewModel传递给web api控制器

时间:2013-07-29 13:32:23

标签: c# asp.net-web-api query-string

我的名为SrchController的WebApi控制器具有下面列出的以下概念验证操作/方法。

我想通过操纵url来调用此方法/操作(不确定要调用它)。用于测试目的。所以我认为这会使用模型绑定。

如果我输入浏览器地址[mysiteroot]/api/srch/TestResults?criteria.name = "hello"

,我希望设置标准的值会进入方法
[HttpGet]
public IEnumerable<ParcelResultItemViewModel> TestResults(SimpleViewModel criteria)
{
    //check value of criteria....it is always null. <-- i'm expecting name = "hello"
    //do stuff here
    return something;
} 

我的问题与这个问题密切相关How to handle optional query string parameters in Web API达林表示它应该按照我的预期运作。可能有什么不对?

webapi路线

 public static void Register(HttpConfiguration config)
        {

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }

            );    
        }

更新

我没有收到任何错误消息,传递给方法的viewmodel的值只是null。

1 个答案:

答案 0 :(得分:1)

url参数应以SimpleViewModel类的属性命名,criteria部分此处不需要。此外,查询字符串以不同的方式构造 - 没有双引号和空格。

总而言之,这是网址的样子:

[mysiteroot]/api/srch/TestResults?name=hello

或者,如果有多个参数:

[mysiteroot]/api/srch/TestResults?name=hello&address=someaddress

也就是说,假设SimpleViewModel具有属性nameaddress(当然不是特定于案例)。从服务器端看,一切正常,所以一旦你开始使用正确的URL,一切都应该按预期工作。