【问题标题】:Why can't I manually pass a ViewModel to a webapi controller through manipulating the URL为什么我不能通过操作 URL 手动将 ViewModel 传递给 webapi 控制器
【发布时间】:2013-07-29 13:32:22
【问题描述】:

我的 WebApi 控制器名为 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;
} 

我的问题与这个问题密切相关 How to handle optional query string parameters in 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。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    或者,如果有多个参数:

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

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

    【讨论】:

    • 感谢您的回答,我必须有其他一些影响此问题的代码。因为,我无法通过手动输入带有属性值的 url 来调用我的 webapi 方法并让它实例化一个 ViewModel 对象。你能想到我应该从哪里开始寻找吗?错误或冲突的 webapi/mvc 路由会导致这种情况吗?
    • @Mr.Manager,在 ASP.NET MVC 中,一切都从路由开始。你能显示你的api路线注册吗?也很高兴知道你得到了什么结果。是 404 Not found,还是 500 内部错误,还是别的什么?
    猜你喜欢
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    相关资源
    最近更新 更多