【发布时间】:2017-10-24 05:58:19
【问题描述】:
下面是我的 API 结构
public class CustomController : ApiController
{
[HttpPost]
public DataSet POSTM(string StaffCode, string bytearray, string Reason)
{
//Some Business logic Here
}
}
及其路线
config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: "api/{controller}/{staffCode}/{bytearray}/{Reason}",
defaults: new {
staffCode = RouteParameter.Optional,
bytearray = RouteParameter.Optional,
Reason = RouteParameter.Optional
}
);
我尝试从 jquery ajax 调用它
var data = {
staffCode: staffCode_,
bytearray: bytearray_,
Reason: Reason_,
};
$.ajax(
{ url: 'http://localhost:59118/api/Custom/',
method : 'POST',
dataType: 'JSON',
data:data,
success: function (d)
{
alert("Saved Successfully");
},
error: function (e)
{
alert("Error please try again");
}
});
调用它后,我在控制台日志中收到 500 Internal Server Error
但是,如果我将 [HttpPost] 更改为 [HttpGet],它就可以正常工作了
为什么它不能作为 POST 工作?
【问题讨论】:
-
将 POST 方法中的参数更改为包含这 3 个属性的模型。还要注意只有路由定义中的最后一个参数可以标记为
RouteParameter.Optional -
将参数更改为模型对象并从可选参数中删除了前两个参数,但仍显示内部服务器错误
-
那么你的服务器代码抛出了异常。一个问题是你有
dataType: 'JSON',但你的方法显然没有返回 JSON。 -
@Jack,当您在 ajax 请求中期待“JSON”时,为什么要从控制器方法返回 DataSet?你应该照顾好这个
-
不要完全改变你的问题,并使已经给出的答案和cmet无效(我已经回滚了你的改变)。我建议您阅读this article 以了解为什么您需要 POST 方法的模型
标签: c# jquery asp.net-mvc asp.net-web-api2