首页新闻找找看学习计划

webapi 传参的问题

0
[已解决问题] 解决于 2016-03-30 15:02

在put里面,想穿一个id 和一个对象,一直报404

controller接收参数是这样的

不知道风往哪儿吹的主页 不知道风往哪儿吹 | 小虾三级 | 园豆:560
提问于:2016-03-20 15:05
< >
分享
最佳答案
0

put(int id,[frombody] table obj) 

id是要放在url里的也就是请求里的url是  api/控制器/123,请求的data是实体.你那样写倒是没错.

奖励园豆:5
吴瑞祥 | 高人七级 |园豆:28770 | 2016-03-20 15:45

id放到url里面是可以的,为甚么我那样写不行,求教

不知道风往哪儿吹 | 园豆:560 (小虾三级) | 2016-03-20 16:38

@不知道风往哪儿吹: 有个网站地址是:asp.net 上面看教程.你需要的是路由和模型绑定这2块的知识点.

吴瑞祥 | 园豆:28770 (高人七级) | 2016-03-20 19:45
其他回答(6)
0

试试在web.config中添加如下的配置:

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>
dudu | 园豆:39222 (高人七级) | 2016-03-20 15:29

<system.webServer>下面已经有这些了

      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

 

支持(0) 反对(0) 不知道风往哪儿吹 | 园豆:560 (小虾三级) | 2016-03-20 16:23

@不知道风往哪儿吹: 如果已经有了,在<system.webServer>添加如下的配置试试:

<modules>
    <remove name="WebDAVModule" />
</modules>
支持(0) 反对(0) dudu | 园豆:39222 (高人七级) | 2016-03-20 16:31

@dudu:  还是404,不懂他到底是怎样接收的

支持(0) 反对(0) 不知道风往哪儿吹 | 园豆:560 (小虾三级) | 2016-03-20 16:35

@不知道风往哪儿吹: 你是用IIS运行的站点吗?

支持(0) 反对(0) dudu | 园豆:39222 (高人七级) | 2016-03-20 17:08

@dudu: 嗯,是的

支持(0) 反对(0) 不知道风往哪儿吹 | 园豆:560 (小虾三级) | 2016-03-20 17:13

@不知道风往哪儿吹: IIS是什么版本?应用程序池是什么模式?

支持(0) 反对(0) dudu | 园豆:39222 (高人七级) | 2016-03-20 17:21

@dudu: vs2013 的IIS express ,我是win8的系统

支持(0) 反对(0) 不知道风往哪儿吹 | 园豆:560 (小虾三级) | 2016-03-20 17:37

@不知道风往哪儿吹: 建议用IIS试试

支持(0) 反对(0) dudu | 园豆:39222 (高人七级) | 2016-03-20 20:43
0
[HttpPut]
public void Put(InputData data){

}

class InputData{
    public int id{get;set;},
    public Table dataModel{get;set;}
}

看看行不

liuxb、 | 园豆:661 (小虾三级) | 2016-03-20 15:34

这样封装成一个类是可以,但是不能传两个参数吗

支持(0) 反对(0) 不知道风往哪儿吹 | 园豆:560 (小虾三级) | 2016-03-20 16:35

@不知道风往哪儿吹: 说到底,这样去想,Action的参数可以是一个对象,是因为微软的工程师在数据传到Action之前,给我们做了一些反序列化的工作。如果Action的参数是多个对象,你让做框架的人根据什么去区分是多个对象?

支持(0) 反对(0) Tony二师弟 | 园豆:204 (菜鸟二级) | 2016-04-06 14:16
0

好奇問,Url裡不用寫ActionName?

RosonJ | 园豆:3198 (老鸟四级) | 2016-03-21 09:09

 路由里面没有配置actionName, 

会依据Http方法来决定Action方法名称

支持(0) 反对(0) 不知道风往哪儿吹 | 园豆:560 (小虾三级) | 2016-03-21 09:19
0

404说明你的/api/productapi/,这个URL并不存在,和前面的ajax已经不是一个问题了,你要先保证可以访问/api/productapi/

Rich.T | 园豆:3438 (老鸟四级) | 2016-03-21 09:54
0

Url:/api/productapi/Put

打个断点 看进方法没.

 

 

晋升中的FE | 园豆:519 (小虾三级) | 2016-03-21 14:00
0

使用dynamic能方便解决你的问题,其实关键是要理解原理,我替你解决了。代码贴出来你参考下。

    $.ajax({
        type: "put",
        url: "http://localhost:27221/api/Charging/Update",
        contentType: 'application/json',
        data: JSON.stringify({ id: "1", dataModel: { ProductName: "aa", Price: 1 } }),
        success: function (data, status) { }
    });
        [HttpPut]
        public bool Update(dynamic obj)
        {
            //动态解析参数
            var id = Convert.ToString(obj.id);
            var oModel = Newtonsoft.Json.JsonConvert.DeserializeObject<TB_Product>(Convert.ToString(obj.dataModel));

            return true;
        }

得到结果:

懒得安分 | 园豆:234 (菜鸟二级) | 2016-04-06 14:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册