AngularJS $resource кодирует весь объект в URL

Я использую Angular 1.4.8 с пользовательским интерфейсом Angular и TypeScript. Мои модели определяются как таковые:

export interface IBatch extends ng.resource.IResource<IBatch> {
    id: Number;
    ...
}

export interface IBatchResource extends ng.resource.IResourceClass<IBatch> {
    snapshot(batch: IBatch);
}

Я настраиваю свой ресурс Batch с помощью специального HTTP-глагола TAKE-SNAPSHOT, который возвращает либо 200 OK, либо 404 NOT FOUND:

var paramDefaults = {
    id: '@id'
};

var actions = {
    'snapshot': { method: 'TAKE-SNAPSHOT' }
};

return <IBatchResource> this.$resource('/api/batches/:id', paramDefaults, actions);

Это позволяет мне сделать снимок определенного пакета. единственным параметром для этого вызова API является идентификатор пакета. Однако $resource кодирует весь объект Batch в строку запроса (настоящая строка имеет длину более 1000 символов, сокращена для краткости):

localhost:15000/api/batches/4?$originalData=%7B%22id%22:4,%22createdDateUtc%22:%222015-12-...

Как заставить $resource направить запрос localhost:15000/api/batches/4?


person Community    schedule 11.01.2016    source источник
comment
Единственный способ, которым я могу думать, - это POST как multipart/form-data, см. здесь: stackoverflow.com/a/33350954/2535335< /а>   -  person Johannes Jander    schedule 11.01.2016
comment
После прочтения исходника ngResource кажется что это невозможно, поскольку hasBody ограничено POST/PUT/PATCH.   -  person miensol    schedule 11.01.2016


Ответы (1)


Мне удалось обходной путь:

var paramDefaults = {
    id: '@id'
};

var actions = {
    'snapshot': <ActionDescriptor>{ method: 'TAKE-SNAPSHOT' }
};

var retval = <IBatchResource> this.$resource('/api/batches/:id', paramDefaults, actions);

/*
 * Passing in the object results in serializing the entire Batch into the URL query string.
 * Instead, we only want to pass the ID.
 */
var oldSnapshotFn = retval.snapshot;
retval.snapshot = (batch: IBatch) => oldSnapshotFn(<any>{id: batch.id });
return retval;
person Community    schedule 11.01.2016