为什么更改控制器的参数会引发 http Post 404 错误?
Why does changing controller's parameter provoke http Post 404 error?
我正在开发带有数据库的 Azure Web 应用程序。我有一个数据库模型和控制器。我正在尝试 Post 数据库中的数据,但在理解为什么从 Web 客户端向控制器发送数据时此代码会发送 404 错误时遇到了一些问题。
以下是我在 AngularJS 中发送数据的方式(参数是 Json 字符串):
$http({
method: 'post',
url: serviceBasePath + "/api/suscribe",
data: parameter,
headers: { 'Content-Type': 'application/json' }
}).then(function (response) {
userService.SetCurrentUser(response.data);
defer.resolve(response.data);
}, function (error) {
defer.reject(error.data);
})
在控制器方面,如果控制器是:
,我会得到 404
[HttpPost]
[Route("api/suscribe")]
public IHttpActionResult PostGTW_Utilisateur(String JsonString)
{
//
}
但是如果我将模型作为参数,404 错误就消失了:
[HttpPost]
[Route("api/suscribe")]
public IHttpActionResult PostGTW_Utilisateur(User u)
{
//
}
Json 对象 class :
public class JsonSuscribeModel
{
public Utilisateur user { get; set; }
public string guid { get; set; }
public string password2 { get; set; }
}
感谢您的提示。
解决方案是使用我的 JsonModel 作为参数:
public IHttpActionResult PostGTW_Utilisateur(JsonSuscribeModel JsonModel)
您错过了端点,因为它不知道 JsonString 是什么。你发送了一个 JSON 但在控制器模型中,你告诉它监听字符串。打开 Chrome(或其他)开发工具并准确查看您随请求发送的内容。
这是另一个提示:
$http({
method: 'post',
url: serviceBasePath + "/api/suscribe",
data: parameter,
headers: { 'Content-Type': 'application/json' }
}).then(function (response) {
userService.SetCurrentUser(response.data);
defer.resolve(response.data);
}, function (error) {
defer.reject(error.data);
})
我已经看到很多次滥用承诺。为什么要使用 $http(这本身就是一个承诺)然后在服务中处理它并 return 另一个承诺?您可以简单地 return $http(并在控制器中解决它的承诺。无论如何,您将不得不解决这个新的承诺,所以为什么要多一个步骤。
return $http({
method: 'post',
url: serviceBasePath + "/api/suscribe",
data: parameter,
headers: { 'Content-Type': 'application/json' }
}).then(function (response) {
userService.SetCurrentUser(response.data);
return response.data;
}, function (error) {
return error.data;
})
这样你 return 整个 $http 并且你指示它 return 成功和错误的内容。因为它本身就是一个承诺,它将像以前一样表现。
我正在开发带有数据库的 Azure Web 应用程序。我有一个数据库模型和控制器。我正在尝试 Post 数据库中的数据,但在理解为什么从 Web 客户端向控制器发送数据时此代码会发送 404 错误时遇到了一些问题。
以下是我在 AngularJS 中发送数据的方式(参数是 Json 字符串):
$http({
method: 'post',
url: serviceBasePath + "/api/suscribe",
data: parameter,
headers: { 'Content-Type': 'application/json' }
}).then(function (response) {
userService.SetCurrentUser(response.data);
defer.resolve(response.data);
}, function (error) {
defer.reject(error.data);
})
在控制器方面,如果控制器是:
,我会得到 404[HttpPost]
[Route("api/suscribe")]
public IHttpActionResult PostGTW_Utilisateur(String JsonString)
{
//
}
但是如果我将模型作为参数,404 错误就消失了:
[HttpPost]
[Route("api/suscribe")]
public IHttpActionResult PostGTW_Utilisateur(User u)
{
//
}
public class JsonSuscribeModel
{
public Utilisateur user { get; set; }
public string guid { get; set; }
public string password2 { get; set; }
}
感谢您的提示。 解决方案是使用我的 JsonModel 作为参数:
public IHttpActionResult PostGTW_Utilisateur(JsonSuscribeModel JsonModel)
您错过了端点,因为它不知道 JsonString 是什么。你发送了一个 JSON 但在控制器模型中,你告诉它监听字符串。打开 Chrome(或其他)开发工具并准确查看您随请求发送的内容。
这是另一个提示:
$http({
method: 'post',
url: serviceBasePath + "/api/suscribe",
data: parameter,
headers: { 'Content-Type': 'application/json' }
}).then(function (response) {
userService.SetCurrentUser(response.data);
defer.resolve(response.data);
}, function (error) {
defer.reject(error.data);
})
我已经看到很多次滥用承诺。为什么要使用 $http(这本身就是一个承诺)然后在服务中处理它并 return 另一个承诺?您可以简单地 return $http(并在控制器中解决它的承诺。无论如何,您将不得不解决这个新的承诺,所以为什么要多一个步骤。
return $http({
method: 'post',
url: serviceBasePath + "/api/suscribe",
data: parameter,
headers: { 'Content-Type': 'application/json' }
}).then(function (response) {
userService.SetCurrentUser(response.data);
return response.data;
}, function (error) {
return error.data;
})
这样你 return 整个 $http 并且你指示它 return 成功和错误的内容。因为它本身就是一个承诺,它将像以前一样表现。