【问题标题】:MVC4 RC WebApi parameter bindingMVC4 RC WebApi 参数绑定
【发布时间】:2012-06-12 21:55:16
【问题描述】:

我从 MVC4 beta 升级到 RC 和最新的 autofac。以下操作已正确绑定,但现在两个参数均为空。我看到他们改变了关于格式化程序等的事情,但我不确定是什么导致了我的问题

[HttpPost]    
RedirectModel MyAction(string value1, string value1)

请求

Method: POST
Accept: application/json
URL: api/controller/myaction
BODY: {"value1":"1000", "value2":"foo"}

【问题讨论】:

    标签: asp.net-mvc autofac asp.net-web-api


    【解决方案1】:

    如果您想避免使用 DTO 对象,请尝试以下操作:

    [HttpPost]    
    RedirectModel MyAction(dynamic value1, dynamic value2) {
        string sValue1 = value1;
        string sValue2 = value2;
    

    【讨论】:

    • 你是英雄。在我非常具体的情况下,这是唯一可行的解​​决方案。我不敢相信我以前没想过。我希望我能给你额外的支持。干杯。
    【解决方案2】:

    不太确定为什么要从 Beta 更改,但我能够通过将操作签名更改为:

    [HttpPost]    
    RedirectModel MyAction(MyActionDTO dto)
    

    并将 MyActionDTO 定义为

     public class MyActionDTO 
     {
            public string value1 { get; set; }
            public string value2 { get; set; }
     }
    

    它抛出了一个异常,即无法使用两个字符串参数绑定到多个主体参数。我猜想使用 DTO 对象更接近地代表您在 AJAX 调用中发送的内容(一个 JSON 对象)。

    【讨论】:

    • 在参数中添加[FromBody]没有任何效果,参数仍然为空。
    • 这确实有效,但我希望不必更改它。我们确实有一些在正文中有单个字符串的调用。我不确定为什么查询字符串上需要一个原始类型。
    • 根据this:blogs.msdn.com/b/jmstall/archive/2012/04/16/…,你可以在body中传递一个且只有一个项目。所以,如果你想传递一个字符串值,你可以这样做,只需传递该值而不将其包装为 JSON 字符串。
    • asp.net 站点今天更新了更多信息:asp.net/web-api/overview/working-with-http/… 请注意,在正文中发布简单值时,必须在值前面加上等号 (=)
    • 非常感谢,将参数绑定到 C# 类对我来说很好。我想问为什么我只能将参数发送到 HttpPost WebApi 操作,我可以将参数发送到 HttpGet Web Api 操作吗?跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多