为什么我的 $resource POST 会导致 404 错误?
Why is my $resource POST resulting in a 404 error?
我有一个接受 Id 和 bool 的 .Net 移动服务 API。如果我使用正确的参数和 headers 从 Postman 调用 API,它工作正常。当我从我的 AngularJs 应用程序调用它时,出现 404 错误,我不知道为什么。
我的后端 API 方法如下所示:
[HttpPost]
public async Task<IHttpActionResult> SetHoldStatus(string id, bool isHeld)
=> Ok(new
{
Transfer = await _workItemRepository.SetTransferHoldStatus(id, isHeld)
});
我的 AngularJs 控制器看起来像这样:
(function () {
angular
.module("pinnacleWarehouser")
.controller("TransferListCtrl",
["transfers",
"transferWorkItemHoldResource",
TransferListCtrl]);
function TransferListCtrl(transfers, transferWorkItemHoldResource) {
var vm = this;
vm.transfers = transfers;
vm.length = transfers.length;
if (vm.length > 0) {
vm.branch = transfers[0].branchId;
for (var i = 0; i < vm.transfers.length; i++) {
vm.transfers[i].transferId = vm.transfers[i].transferId.trim();
};
}
vm.changeHold = function (transferId, isHeld) {
transferWorkItemHoldResource.save({ Id: transferId, IsHeld: isHeld });
};
}}());
我的资源如下所示:
(function () {
"use strict";
angular
.module("common.services")
.factory("transferWorkItemHoldResource",
["$resource", transferWorkItemHoldResource]);
function transferWorkItemHoldResource($resource) {
return $resource("https://my-test-url.net/api/TransferWorkItem/SetHoldStatus", {}, {
save: {
method: 'POST',
headers: { 'ZUMO-API-VERSION': '2.0.0' }
}
});
}}());
因此,当我从 Postman 调用 API 时,它会使用我作为参数发送的 bool 更新记录。有效。
当我 运行 应用程序并调用 API 时,这就是我得到的:
查看开发工具中的请求 header,我可以看到我的参数在请求负载中:
我从未尝试过将 $resource 用于 POST 和自定义 header 和参数,所以我可能遗漏了一些东西。我希望有人能指出我做错了什么。
您应该将动作参数定义为复杂对象。
改变它
public async Task<IHttpActionResult> SetHoldStatus(string id, bool isHeld)
至
public async Task<IHttpActionResult> SetHoldStatus(SetHoldStatusInput input)
public class SetHoldStatusInput
{
public string Id { get; set; }
public bool IsHeld { get; set; }
}
我有一个接受 Id 和 bool 的 .Net 移动服务 API。如果我使用正确的参数和 headers 从 Postman 调用 API,它工作正常。当我从我的 AngularJs 应用程序调用它时,出现 404 错误,我不知道为什么。
我的后端 API 方法如下所示:
[HttpPost]
public async Task<IHttpActionResult> SetHoldStatus(string id, bool isHeld)
=> Ok(new
{
Transfer = await _workItemRepository.SetTransferHoldStatus(id, isHeld)
});
我的 AngularJs 控制器看起来像这样:
(function () {
angular
.module("pinnacleWarehouser")
.controller("TransferListCtrl",
["transfers",
"transferWorkItemHoldResource",
TransferListCtrl]);
function TransferListCtrl(transfers, transferWorkItemHoldResource) {
var vm = this;
vm.transfers = transfers;
vm.length = transfers.length;
if (vm.length > 0) {
vm.branch = transfers[0].branchId;
for (var i = 0; i < vm.transfers.length; i++) {
vm.transfers[i].transferId = vm.transfers[i].transferId.trim();
};
}
vm.changeHold = function (transferId, isHeld) {
transferWorkItemHoldResource.save({ Id: transferId, IsHeld: isHeld });
};
}}());
我的资源如下所示:
(function () {
"use strict";
angular
.module("common.services")
.factory("transferWorkItemHoldResource",
["$resource", transferWorkItemHoldResource]);
function transferWorkItemHoldResource($resource) {
return $resource("https://my-test-url.net/api/TransferWorkItem/SetHoldStatus", {}, {
save: {
method: 'POST',
headers: { 'ZUMO-API-VERSION': '2.0.0' }
}
});
}}());
因此,当我从 Postman 调用 API 时,它会使用我作为参数发送的 bool 更新记录。有效。
当我 运行 应用程序并调用 API 时,这就是我得到的:
查看开发工具中的请求 header,我可以看到我的参数在请求负载中:
我从未尝试过将 $resource 用于 POST 和自定义 header 和参数,所以我可能遗漏了一些东西。我希望有人能指出我做错了什么。
您应该将动作参数定义为复杂对象。
改变它
public async Task<IHttpActionResult> SetHoldStatus(string id, bool isHeld)
至
public async Task<IHttpActionResult> SetHoldStatus(SetHoldStatusInput input)
public class SetHoldStatusInput
{
public string Id { get; set; }
public bool IsHeld { get; set; }
}