ASP.NET MVC4 Web Api中HttpParameterBinding怎么获取目标对象类型

潮起潮落 2013-09-02 03:47:33
Action中这样一个方法:

public bool InertMulit(List<Answer> answer)
{

}

然后我想达到这样一种效果,Request-Body为json格式的字符串,比如

[{"AID":123},{"AID":124}]

然后在请求时自动绑定到List<Answer>类型的answer参数中

看了一下没有发现系统的默认支持,然后自己试了一下,发现MVC和web api的绑定机制并不相同,不是用的ModelBinder而是HttpParameterBinding。
我的想法就是获取到请求中的RequestBody中的字符串,然后序列化为对应类型的对象,比如上面所说的List<Answer>。

现在想问的是,web api有没有可用的默认实现可以达成这样的效果呢?
如果没有,怎么在继承于HttpParameterBinding的方法

public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider,
HttpActionContext actionContext, CancellationToken cancellationToken)

中获取当前参数的类型呢?序列化需要一个目标类型。
...全文
225 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
newtee 2013-09-12
  • 打赏
  • 举报
回复
using MvcApplication.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace MvcApplication.Controllers
{
    public class TestController : ApiController
    {
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        public string Get(int id)
        {
            return "value";
        }

        public void Post([FromBody]string value)
        {
        }

        public void Put(int id, [FromBody]string value)
        {
        }

        public void Delete(int id)
        {
        }


        [HttpPost]
        public IEnumerable<TestJsonRequest> TestListJson(IEnumerable<TestJsonRequest> model)
        {
            return model;
        }

        [HttpPost]
        public TestJsonRequest TestJson(TestJsonRequest model)
        {
            return model;
        }
    }
}
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Test</title>
    <script src="~/Scripts/jquery-1.7.1.min.js"></script>
    <script src="~/Scripts/json2.min.js"></script>
    <script type="text/javascript">
        $(function () {
            var jsonData = JSON.stringify([{ Id: 1, Name: "asasas" }, { Id: 1, Name: "2" }]);
            $.ajax({
                url: "http://localhost:33516/api/Test/TestListJson",
                type: "POST",
                dataType: "json",
                data: jsonData,
                contentType: "application/json;charset=utf-8",
                success: function (data) {
                    alert(data[0].Id);
                }

            });
        })

        $(function () {
            var jsonData = JSON.stringify({ Id: 1, Name: "2" });
            $.ajax({
                url: "http://localhost:33516/api/Test/TestJson",
                type: "POST",
                dataType: "json",
                data: jsonData,
                contentType: "application/json;charset=utf-8",
                success: function (data) {
                    alert(data.Id);
                }

            });
        })
    </script>
</head>
<body>
    <div>
    </div>
</body>
</html>
newtee 2013-09-12
  • 打赏
  • 举报
回复
引用 10 楼 KongHuLu 的回复:
[quote=引用 8 楼 zhuankeshumo 的回复:]
public bool InertMulit(IEnumerable<Answer> answer)
{
 
}
这样就行了 上次看见忘了回了 今天翻mvc源码时候突然想起来了
这样不加[FromBody]也行?[/quote]你也可以自己试验一下
newtee 2013-09-12
  • 打赏
  • 举报
回复
引用 10 楼 KongHuLu 的回复:
[quote=引用 8 楼 zhuankeshumo 的回复:]
public bool InertMulit(IEnumerable<Answer> answer)
{
 
}
这样就行了 上次看见忘了回了 今天翻mvc源码时候突然想起来了
这样不加[FromBody]也行?[/quote]可以的
潮起潮落 2013-09-12
  • 打赏
  • 举报
回复
引用 8 楼 zhuankeshumo 的回复:
public bool InertMulit(IEnumerable<Answer> answer)
{
 
}
这样就行了 上次看见忘了回了 今天翻mvc源码时候突然想起来了
这样不加[FromBody]也行?
newtee 2013-09-08
  • 打赏
  • 举报
回复
最近开始学php了 在看zend framework
newtee 2013-09-08
  • 打赏
  • 举报
回复
public bool InertMulit(IEnumerable<Answer> answer)
{
 
}
这样就行了 上次看见忘了回了 今天翻mvc源码时候突然想起来了
潮起潮落 2013-09-02
  • 打赏
  • 举报
回复
引用 4 楼 Sandy945 的回复:
http://tech.pro/tutorial/1289/building-rest-api-with-mvc-4-web-api-part-2
非常好的文章,谢谢推荐!~
潮起潮落 2013-09-02
  • 打赏
  • 举报
回复
引用 2 楼 jshi123 的回复:
http://bbs.csdn.net/topics/390530662?page=1#post-395162628 看14楼fangxinggood的解答
用fiddler试了一次,理解了。。原来so easy。。 之前只看了一些过期的ModelBinder方面的文章,走偏方向了
潮起潮落 2013-09-02
  • 打赏
  • 举报
回复
引用 2 楼 jshi123 的回复:
http://bbs.csdn.net/topics/390530662?page=1#post-395162628 看14楼fangxinggood的解答
嗯。只看到了10#啊 那个FromBody的Attribute比较好奇
jshi123 2013-09-02
  • 打赏
  • 举报
回复
潮起潮落 2013-09-02
  • 打赏
  • 举报
回复
使用反射,可用了。 大家有没有更好经验或者方式呢?

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧