ngResource.Delete() 像对象一样解析我的 Guid,而不是将其作为 URL 的一部分传递
ngResource.Delete() is parsing my Guid like an object instead of passing it as part of the URL
我正在使用 TypeScript 为我的 Asp.NET.Web.API/MVC 应用程序生成由 ngresources 支持的 angularjs。我有一个仪表板,我正在使用它以 RESTful 的方式为此应用程序启用用户管理。我目前让 CRUD 操作的 CRU 部分运行良好。但是,DELETE 功能已损坏。
我正在尝试使用我的成员的标识值作为删除函数的参数。这对我的 PUT 动词很有用,所以令人困惑的是为什么 DELETE 动词导致 GUID 被破坏。
我的端点定义为 /api/member/{identity}。
每当 angularJS 尝试删除用户时,我得到:
DELETE https://localhost:44300/api/member?0=0&1=a&10=7&11=3&12=c&13=-&14=4&15=8&16…e&27=b&28=2&29=e&3=b&30=5&31=0&32=e&33=4&34=0&35=9&4=a&5=d&6=e&7=d&8=-&9=d 405 (Method Not Allowed)
我的 MemberResourceBuilder:
public getResource(): Interfaces.IMemberResource {
return <Interfaces.IMemberResource> this.$resource(this.baseUrl + "member/:identity", { identity: "@Identity" }, {
update: this.updateAction});
}
我的会员控制器:
module Controllers {
export class MembersController implements Interfaces.IMembersController {
static id = "membersController";
static $inject = ['$scope', '$rootScope', 'memberDataStore', 'editorDataStore', 'membersService'];
constructor(private $scope: any, $rootScope: any, private memberDataStore: Interfaces.IMemberResource, private editorDataStore : Interfaces.IMemberResource, private membersService: Services.MembersService) {
if (!angular.isDefined(memberDataStore)) {
Ntier.Tools.logError("MemberDataStore NOT defined. Controller not properly constructed.", "Error initializing member functions. See debug console for details.");
} else {
//$scope.members = memberDataStore.query();
this.loadMembers();
}
$scope.actions = this;
}
newMember : Interfaces.IMember;
loadMembers() {
this.$scope.members = this.memberDataStore.query();
if (!angular.isDefined(this.$scope.members)) {
Ntier.Tools.logError("Members NOT defined. Controller not properly constructed.", "Error initializing members. See debug console for details.");
}
}
selectMember(member: Interfaces.IMember) {
this.membersService.selectMember(member);
this.$scope.selectedMember = this.membersService.selectedMember;
}
update(member: Interfaces.IMember) {
alert('saving');
this.editorDataStore.update(member,(updatedMember: Interfaces.IMember) => {
this.loadMembers();
}, (reason:any)=>{alert(reason)});
}
save(member: Interfaces.IMember) {
this.memberDataStore.save(member, (newMember: Interfaces.IMember) => {
this.loadMembers();
this.$scope.actions.newMember = <Interfaces.IMember> new Entities.Member();
}, (reason: any) => { alert(reason) });
}
delete(member: Interfaces.IMember) {
alert(member.Identity);
this.memberDataStore.delete(member.Identity, () => {
this.loadMembers();
this.$scope.actions.newMember = <Interfaces.IMember> new Entities.Member();
}, (reason: any) => { alert('failed to Delete the user') });
}
}
我的会员:
// ReSharper disable InconsistentNaming
模块接口{
export interface IMember extends ng.resource.IResource<IMember> {
UserName: string;
Password: string;
ConfirmedPassword: string;
IsApproved: boolean;
FirstName: string;
Middle: string;
LastName: string;
FullName: string;
Creating: boolean;
Viewing: boolean;
Editing: boolean;
Deleting: boolean;
ChangePassword: boolean;
Identity: string;
}
}
我的 IMemberResource:
module Interfaces {
export interface IMemberResource extends ng.resource.IResourceClass<IMember> {
update(member: IMember): IMember;
update(member: IMember, success?: (member: IMember) => void, error?: (reason: any) => void): IMember;
}
}
更新
张志敏说的没错。我很确定我必须传递一个对象,但我的问题是区分大小写。 Zhimin 的回答有效,但我能够接受他的回答并将其转化为我认为更符合我所用对象的答案。
在控制器中:
delete(member: Interfaces.IMember) {
this.memberDataStore.delete(member, () => {
this.loadMembers();
this.$scope.actions.newMember = <Interfaces.IMember> new Entities.Member();
}, (reason: any) => {
alert('Failed to Delete the user! Reason: ' + reason);
});
}
然后在资源生成器中:
public getResource(): Interfaces.IMemberResource {
return <Interfaces.IMemberResource> this.$resource(this.baseUrl + "member/:Identity", { Identity: "@Identity" }, {
update: this.updateAction});
}
注意使用大写而不是小写。
您传递给 delete
的参数应该是一个对象,而不仅仅是一个身份:
使用
this.memberDataStore.delete({ identity: member.Identity}, () => {})
而不是
this.memberDataStore.delete(member.Identity, () =>{})
我正在使用 TypeScript 为我的 Asp.NET.Web.API/MVC 应用程序生成由 ngresources 支持的 angularjs。我有一个仪表板,我正在使用它以 RESTful 的方式为此应用程序启用用户管理。我目前让 CRUD 操作的 CRU 部分运行良好。但是,DELETE 功能已损坏。
我正在尝试使用我的成员的标识值作为删除函数的参数。这对我的 PUT 动词很有用,所以令人困惑的是为什么 DELETE 动词导致 GUID 被破坏。
我的端点定义为 /api/member/{identity}。
每当 angularJS 尝试删除用户时,我得到:
DELETE https://localhost:44300/api/member?0=0&1=a&10=7&11=3&12=c&13=-&14=4&15=8&16…e&27=b&28=2&29=e&3=b&30=5&31=0&32=e&33=4&34=0&35=9&4=a&5=d&6=e&7=d&8=-&9=d 405 (Method Not Allowed)
我的 MemberResourceBuilder:
public getResource(): Interfaces.IMemberResource {
return <Interfaces.IMemberResource> this.$resource(this.baseUrl + "member/:identity", { identity: "@Identity" }, {
update: this.updateAction});
}
我的会员控制器:
module Controllers {
export class MembersController implements Interfaces.IMembersController {
static id = "membersController";
static $inject = ['$scope', '$rootScope', 'memberDataStore', 'editorDataStore', 'membersService'];
constructor(private $scope: any, $rootScope: any, private memberDataStore: Interfaces.IMemberResource, private editorDataStore : Interfaces.IMemberResource, private membersService: Services.MembersService) {
if (!angular.isDefined(memberDataStore)) {
Ntier.Tools.logError("MemberDataStore NOT defined. Controller not properly constructed.", "Error initializing member functions. See debug console for details.");
} else {
//$scope.members = memberDataStore.query();
this.loadMembers();
}
$scope.actions = this;
}
newMember : Interfaces.IMember;
loadMembers() {
this.$scope.members = this.memberDataStore.query();
if (!angular.isDefined(this.$scope.members)) {
Ntier.Tools.logError("Members NOT defined. Controller not properly constructed.", "Error initializing members. See debug console for details.");
}
}
selectMember(member: Interfaces.IMember) {
this.membersService.selectMember(member);
this.$scope.selectedMember = this.membersService.selectedMember;
}
update(member: Interfaces.IMember) {
alert('saving');
this.editorDataStore.update(member,(updatedMember: Interfaces.IMember) => {
this.loadMembers();
}, (reason:any)=>{alert(reason)});
}
save(member: Interfaces.IMember) {
this.memberDataStore.save(member, (newMember: Interfaces.IMember) => {
this.loadMembers();
this.$scope.actions.newMember = <Interfaces.IMember> new Entities.Member();
}, (reason: any) => { alert(reason) });
}
delete(member: Interfaces.IMember) {
alert(member.Identity);
this.memberDataStore.delete(member.Identity, () => {
this.loadMembers();
this.$scope.actions.newMember = <Interfaces.IMember> new Entities.Member();
}, (reason: any) => { alert('failed to Delete the user') });
}
}
我的会员:
// ReSharper disable InconsistentNaming
模块接口{
export interface IMember extends ng.resource.IResource<IMember> {
UserName: string;
Password: string;
ConfirmedPassword: string;
IsApproved: boolean;
FirstName: string;
Middle: string;
LastName: string;
FullName: string;
Creating: boolean;
Viewing: boolean;
Editing: boolean;
Deleting: boolean;
ChangePassword: boolean;
Identity: string;
}
}
我的 IMemberResource:
module Interfaces {
export interface IMemberResource extends ng.resource.IResourceClass<IMember> {
update(member: IMember): IMember;
update(member: IMember, success?: (member: IMember) => void, error?: (reason: any) => void): IMember;
}
}
更新
张志敏说的没错。我很确定我必须传递一个对象,但我的问题是区分大小写。 Zhimin 的回答有效,但我能够接受他的回答并将其转化为我认为更符合我所用对象的答案。
在控制器中:
delete(member: Interfaces.IMember) {
this.memberDataStore.delete(member, () => {
this.loadMembers();
this.$scope.actions.newMember = <Interfaces.IMember> new Entities.Member();
}, (reason: any) => {
alert('Failed to Delete the user! Reason: ' + reason);
});
}
然后在资源生成器中:
public getResource(): Interfaces.IMemberResource {
return <Interfaces.IMemberResource> this.$resource(this.baseUrl + "member/:Identity", { Identity: "@Identity" }, {
update: this.updateAction});
}
注意使用大写而不是小写。
您传递给 delete
的参数应该是一个对象,而不仅仅是一个身份:
使用
this.memberDataStore.delete({ identity: member.Identity}, () => {})
而不是
this.memberDataStore.delete(member.Identity, () =>{})