这是我的api中的post方法,有一个int Id参数和Student类参数
这是我失败的post方法
错误提示:
这是成功的post方法
我想请问一下为什么不能用我失败的那个方法,用那个方法报错"Message":"请求的资源不支持 http 方法“POST”。
必须要在url地址后面加Id吗,"api/Values/66",为什么不能把int Id一起写在post的参数列表里
api/Value 跟你貼的代碼是同一個??
你貼的代碼要求參數int Id, Student student
你呼叫api/Value 的參數卻是Id, Name
要不要先去確認一下你呼叫的到底是哪個API
是同一个,Id在api/values/66,66就是,student里有属性Id和name
@godcloudy:
實測這樣OK,給你參考
$.post("/api/Value", { Id: 77, student: { Id: 66, Name: 'sadf' } }, function(data){
//...
});
@RosonJ: 我是这样传的参数,但是就是出错了
@godcloudy:
你仔細看看,我有做修改
@RosonJ:
除了post参数里的student和data区别和控制器名字Value和Values,其他没有差别,而且改成student也没用
@godcloudy:
Value 的部份是我拼錯了哈哈
如果這樣傳你的API 還是接不到
建議你把Route 貼出來看看
@RosonJ: Route没有改过默认的
@godcloudy:
那我有疑問
預設的Route 怎麼將你的請求從api/Values 映射到 Post
沒有特別設定的話,你的請求Url 應該是"Controller名稱/Post"才對啊
@RosonJ: 我用的框架是.net framework,不是.net core,我的方法名字是POST就会自动匹配,api一开始设计就是根据语义匹配方法,.net core好像要在方法上加特性
@godcloudy:
你的Controller名稱是?
@RosonJ: Values
@godcloudy:
WebAPI 預設的參數規則如表格
如果要讓基本型別(如你案例中的Id)可以從Body傳送,可以加上[FromBody]
@RosonJ:给int Id也加上的话报错就成了这样
@godcloudy:
目前測試最優解應該是如下
Model
public class Parameter
{
public int Id { get; set; }
public Student student { get; set; }
}
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
API
public IEnumerable<Student> Post(Parameter param)
{
return new List<Student>
{
new Student
{
Id = 1,
Name = "Test"
}
};
}
JS
$.post("/api/Values", { Id: 77, student: { Id: 66, Name: 'sadf' } }, function(data){
//...
});
問題在於WebAPI對多參數的支援不夠靈活,建議改變實作方式
@RosonJ: 正解!感谢感谢
把Id写道post参数列表,需要跟Student封装成一个类
请问怎么封装
断点看看,是不是进入都到这个方法里去了,感觉压根不是这个方法
确实没有进入这个方法,提示Status Code: 405 Method Not Allowed ,应该是参数不匹配,但是我这样写确实是把Id和student属性值都传过去了,,
@godcloudy: 看看进入到哪个方法中去了,你现在都没进去,怎么知道传过去了,还有用JSON.stringify把你的参数包起来
是不是路由定向错了?
没有错,报错显示"Message":"请求的资源不支持 http 方法“POST”,似乎是和参数不匹配
api里只有一个post方法
@godcloudy: 新建的时候,人家默认的路由配置,你可以修改成你想要的的