сохранение документа через сервисы с Angular 7 - PullRequest
0 голосов
/ 15 января 2019

Привет, я работаю над угловым 7 приложением с asp.net mvc.

И я пытаюсь сохранить загруженные документы в базу данных.

это метод сохранения данных:

export class EditDiplomaComponent extends AfwComponent implements OnInit {
    resources: DiplomasWijzigenResourcesModel;
    private readonly apiDiploma: 'api/register/teachers/current/diploma';
    readonly resourceKeys = DiplomasWijzigenResourcesModel.keys;
    buttons: ImmutableArrayType<ButtonModel>;
    protected readonly formName = FormNamesModel.diplomaForm;
    formModel: AfwFormService;
    documentList?: DocumentListModel;
    documentListCompoment: DocumentListComponent;
    diplomaFormKeysModel: DiplomaFormKeysModel;
    protected baseDocumentsUrl: string;
    teacher: TeacherModel;


    constructor(
        private readonly http: AfwHttp,
        readonly route: ActivatedRoute,
        readonly textResourceService: TextResourceService,
        private readonly formService: FormService,
        private readonly multiFileUploadControlFactory: MultiFileUploadControlFactory,
        private readonly feedbackService: FeedbackStoreService,
        private readonly router: Router,


    ) {
        super(textResourceService, route);
    }

    ngOnInit(): void {
        // this.baseDocumentsUrl = `api/register/teachers/current/diploma/${this.teacher.guid}/documents?fileName=`;
        const defaultModel = diplomaFormModel(this.multiFileUploadControlFactory);

        this.formModel = this.formService.createModel<DiplomaFormModel, DiplomasWijzigenResourcesModel>(
            defaultModel, { qualificationTerms: null, diplomasUpload: this.multiFileUploadControlFactory.createEmptyDefaultValues() }, this.resources
        );

        const saveBtn = new ActionButtonModel({ resourceKey: this.resourceKeys.opslaanKnop, isSubmit: true });
        const cancelBtn = new CancelLinkButtonModel();
        this.buttons = ImmutableArrayType.Create([saveBtn, cancelBtn]);
    }

    diplomaDataSubmitted($event: AfwFormService) {

        // const formModel = $event;
        if (this.allowSubmitAgain && this.formModel.form.valid) {

            const obs = this.saveDiploma(true, this.resources.opslaanSpinnerTekst).pipe(map(() => {
                this.router.navigateByUrl(RoutesRegisterModel.pathnameMyRegisterRouteDiplomas).then(() => {
                    this.feedbackService.addSuccessMessage (
                        {
                            feedbackPortalKey: FeedbackPortalsModel.mainFeedback,
                            message: { key: 'succesvolWijziging', value: this.resources.succesvolWijziging },
                        });
                });
            }))
            this.submitAllowed(obs);
        }
    }

    saveDiploma(competenceStatement: boolean, spinnerMessage: string): Observable<any> {

        return this.http.post(`${this.apiDiploma}`,
            competenceStatement,
            spinnerMessage);
    }
}

и это контроллер диплома:

[Authorize(Roles = IdentityRoles.Teacher)]
    [RoutePrefix("api/register/teachers/current/diploma")]
    public sealed class DiplomaController : ApiControllerBase
    {
        private readonly IDiplomaProcess _diplomaProcess;

        /// <summary>
        /// Constructor.
        /// </summary>
        public DiplomaController(IDiplomaProcess diplomaProcess)
        {
            _diplomaProcess = diplomaProcess;
        }

        /// <summary>
        /// Create the diploma record for the current teacher.
        /// </summary>
        /// <param name="competenceStatement">Has agreed to the competence statement?</param>
        [Route("")]
        [HttpPost]
        public void CreateDiploma(bool competenceStatement)
        {
            _diplomaProcess.CreateDiploma(competenceStatement);
        }

        /// <summary>
        /// Delete the diploma record for the current teacher.
        /// </summary>
        [HttpDelete]
        [Route("")]
        public void DeleteDiploma()
        {
            _diplomaProcess.DeleteDiploma();
        }

        /// <summary>
        /// Get the diploma documents of the current teacher.
        /// </summary>
        /// <returns>The DocumentListDto with the diploma documents.</returns>
        [Route("")]
        [HttpGet]
        public DiplomaDto GetDiplomas()
        {
            return _diplomaProcess.GetDiplomas();
        }
}

Но когда я отлаживаю код, я вижу это в этой строке:

 return this.http.post(`${this.apiDiploma}`, 

apDiploma не определена. И я использую Observable.

Но у меня есть идея, что вы должны подписаться на него. Но как подписаться на метод?

Спасибо

спасибо. но в этой строке: вернуть this.http.post (${this.apiDiploma},

Я вижу правильный url: "api/register/teachers/current/diploma"

это вывод:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<DiplomaDto xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/VLR.BackEnd.Dto.Teacher">
<Documents xmlns:d2p1="http://schemas.datacontract.org/2004/07/VLR.BackEnd.Dto.Document">
<d2p1:Documents/>
<d2p1:DocumentsInQueue>-2147483648</d2p1:DocumentsInQueue>
<d2p1:IsSucceeded>true</d2p1:IsSucceeded>
</Documents>
<HasAgreedToCompetenceStatement>false</HasAgreedToCompetenceStatement>
</DiplomaDto>

Но если отлаживать бэкэнд (контроллер)

тогда я вижу, что это не этот метод:

[Route("")]
        [HttpPost]
        public void CreateDiploma(bool competenceStatement)
        {
            _diplomaProcess.CreateDiploma(competenceStatement);
        }

1 Ответ

0 голосов
/ 15 января 2019

Я думаю, что вы хотите определить его как тип строки и присвоить ему значение

изменить эту строку на

private readonly apiDiploma: string = 'api/register/teachers/current/diploma';
...