Я пытаюсь обработать коды ошибок, выдаваемые приложением asp.net web api.Он работает нормально, тогда запись существует и выдается код ошибки 409, но не работает, если в случае успеха выдается код ответа 200.Точка отладки никогда не попадает в блок catch в случае успеха, а объект результата в методе save равен null и, следовательно, не запускается внутри блока if (result).Как отобразить сообщение об успехе?Ранее мой веб-интерфейс asp.net возвращал IHttpActionResult и блок if (result) выполнялся в случае успеха.
Веб-интерфейс Asp.net
[HttpPost]
[SkipTokenAuthorization]
[Route("api/classificationoverrides/create")]
public HttpResponseMessage Create(ClassificationItemViewModelCreate model)
{
HttpResponseMessage response;
var mgrClassificationService = GetService<MGR_STRT_CLASSIFICATION>();
var isExists = mgrClassificationService.Where(x =>
x.MANAGERSTRATEGYID == model.ManagerStrategyId && x.PRODUCT_ID == model.ProductId).FirstOrDefault();
if (isExists == null)
{
var mgrClassficationOverride = new MGR_STRT_CLASSIFICATION();
if (model != null)
{
mgrClassficationOverride.PRODUCT_ID = model.ProductId;
mgrClassficationOverride.LEGACY_STRATEGY_ID = model.LegacyStrategyId;
mgrClassficationOverride.STRATEGY_ID = model.StrategyId;
mgrClassficationOverride.MANAGERSTRATEGY_TYPE_ID = model.ManagerStrategyTypeId;
mgrClassficationOverride.MANAGERSTRATEGYID = model.ManagerStrategyId;
mgrClassficationOverride = mgrClassificationService.Create(mgrClassficationOverride);
}
response = Request.CreateResponse(HttpStatusCode.OK);
}
else
{
response = Request.CreateResponse(HttpStatusCode.Conflict, "The item already exists");
}
return response;
}
Angular
Save() {
if (this.ClassificationOverrideDetails.ClassificationEntities.ID === 0) {
this.Error = '';
this.classificationOverrideService
.createClassificationOverrideDetails(this.ClassificationOverrideDetails.ClassificationEntities)
.then((result) => {
if (result) {
this.ClassficationOverrideDetailsEvent.next('init');
this.notify.success('Classification Overrides Successfully Created');
}
}).catch(err => {
if (err.status === 200) {
this.notify.error('Classification Overrides Successfully Created');
} else if (err.status !== 409) {
this.notify.error('An Error Has Occured While Updating Classification Overrides Details');
} else if (err.status === 409) {
this.notify.error('Product already exists for this Manager Strategy');
}
});
}
Служба
import { defer as observableDefer } from 'rxjs';
import { refCount, publishReplay } from 'rxjs/operators';
import { Injectable } from '@angular/core';
import { Response, URLSearchParams, RequestOptionsArgs, Headers, RequestOptions, ResponseContentType } from '@angular/http';
import { AppConfig } from '../app.config';
import { Observable } from 'rxjs/Rx';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { Manager360CommonService } from './mgr360.common.service';
import { IClassificationOverride } from '../classification-overrides/classification-override.interface';
@Injectable()
export class ClassificationOverrideService {
constructor(
private mgr360CommonService: Manager360CommonService
) { }
getClassificationOverrideDetails(mgrStrategyId: number) {
return this.mgr360CommonService.httpGet('/api/classificationoverrides/Details/' + mgrStrategyId);
}
getClassificationDetails(Id: number) {
return this.mgr360CommonService.httpGet('/api/classificationoverrides/classificationdetails/' + Id);
}
updateClassificationOverrideDetails(classificationOverride: IClassificationOverride) {
return this.mgr360CommonService.httpPut('/api/classificationoverrides/update', JSON.stringify(classificationOverride));
}
createClassificationOverrideDetails(classificationOverride: IClassificationOverride) {
return this.mgr360CommonService.httpPostAsync('/api/classificationoverrides/create', JSON.stringify(classificationOverride));
}
deleteClassificationOverrideDetails(Id: number) {
return this.mgr360CommonService.httpDelete('/api/classificationoverrides/delete/' + Id);
}
}
Общая служба
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
import { RequestOptions } from '@angular/http';
import { Options } from 'selenium-webdriver/firefox';
import { NotifyService } from '../utilities/notify.service';
const httpPostOptions = {
headers:
new HttpHeaders(
{
'Content-Type': 'application/json; charset=utf-8',
}),
withCredentials: true,
};
@Injectable({
providedIn: 'root'
})
export class Manager360CommonService {
webApiLocation = this.getApiLocation();
private getApiLocation() {
const port = location.port ? ':56888' : '';
return location.protocol + '//' + location.hostname + port;
}
constructor(private httpClient: HttpClient) { }
httpGetAsync(url: string) {
return this.httpClient.get(this.webApiLocation + url, httpPostOptions)
.pipe(map((response: Response) => {
return response;
}))
.toPromise()
.catch((error: any) => {
this.onError(error);
return Promise.reject(error);
});
}
}