为什么可以';t我通过操纵URL手动将ViewModel传递给webapi控制器

本文关键字:ViewModel 控制器 webapi URL 操纵 为什么 | 更新日期: 2023-09-27 18:25:17

My WebApi Controller名为SrchController,具有以下概念验证操作/方法。

我想通过操纵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;
} 

我的问题与这个问题密切相关如何处理Web API中的可选查询字符串参数Darin说它应该像我期望的那样工作。可能出了什么问题?

webapi路由

 public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );    
        }

更新

我没有收到任何错误消息,传递给该方法的视图模型的值只是null。

为什么可以';t我通过操纵URL手动将ViewModel传递给webapi控制器

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

总而言之,以下是url的外观:

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

或者,在多个参数的情况下:

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

也就是说,再次假设SimpleViewModel具有属性nameaddress(当然不是具体情况)。从服务器端看,一切都很正常,所以只要您开始使用正确的URL,一切都应该按预期进行。