Ich würde einige der Beispiele auf Github betrachten, um zu sehen, wie andere Leute es getan haben. Es gibt eine Reihe von Dingen, die genau richtig sein müssen, damit alles funktioniert, und die Fehler können nebulös sein, bis Sie es in Betrieb nehmen.
Fügen Sie Ihrem Projekt eine Web-API-Controller-Klasse hinzu. Um sicherzustellen, dass am Anfang alles funktioniert, würde ich vorschlagen, Ihr HttpGet-Attribut mit "api/values" zu codieren.
WerteController.cs.:
public class ValuesController : Controller
{
[HttpGet("api/values")]
public IActionResult Get()
{
return new JsonResult(new string[] { "value1", "value2" });
}
Startup.Cs. Sie benötigen die angular2-Routen, um die Routen von ASP.NET nicht zu beeinträchtigen. Das bedeutet, dass Sie die index.html an den Client senden müssen, wenn ein 404-Fehler vorliegt. Die App.Use Lambda erreicht dies. Beachten Sie, dass es vor den Anrufen zu app.UseDefaultFiles() und app.UseStaticFiles()
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
var angularRoutes = new[] {
"/home"
};
app.Use(async (context, next) =>
{
if (context.Request.Path.HasValue && null != angularRoutes.FirstOrDefault(
(ar) => context.Request.Path.Value.StartsWith(ar, StringComparison.OrdinalIgnoreCase)))
{
context.Request.Path = new PathString("/");
}
await next();
});
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Sobald Sie diese Einstellung haben, sollten Sie Ihre API mit Postman testen, um sicherzustellen, dass das Routing funktioniert, wie Sie es wollen zu. Wenn dies nicht funktioniert, funktioniert es nicht in Angular. Ich habe http://localhost:5001/ als meine App URL in meinem Visual Studio-Projekt Debug-Einstellungen festgelegt.
Wenn das richtig funktioniert, auf verschiebt es darum geht, mit kantigen 2. Sie müssen verwenden, um das Basiselement unmittelbar nach dem Kopf-Tag in Ihrer HTML-Datei zu laden. Dies teilt dem Angular-Router, was die statische Teil der URL ist:
Index.HTML
<base href="/">
Als nächstes werden Sie einen Dienst in Angular2 erstellen müssen, um die Werte von Ihrem API Get: dataService.ts
import { Http, Response, Headers } from '@angular/http';
import 'rxjs/add/operator/map'
import { Observable } from 'rxjs/Observable';
import { Configuration } from '../app.constants';
@Injectable()
export class DataService {
private actionUrl: string;
constructor(private _http: Http, private _configuration: Configuration) {
this.actionUrl = 'http://localhost:5001/api/values/';
}
public GetAll =(): Observable<any> => {
return this._http.get(this.actionUrl)
.map((response: Response) => <any>response.json())
.do(x => console.log(x));
}
Der .do Operator in RxJS ist sehr praktisch. Es ermöglicht Ihnen zu debuggen, dass Sie die Werte von Ihrer API korrekt erhalten. Siehe Andre Staltz's blog for more details.
Schließlich erstellen Sie eine Komponente den Dienst zu nutzen: app.component.ts
import { Observable } from 'rxjs/Observable';
import { Component, OnInit } from '@angular/core';
import { Http } from '@angular/http';
import { DataService } from '../services/DataService';
@Component({
selector: 'app',
template: `My Values: <ul><li *ngFor="let value of values">
<span>{{value.id}} </span>
</li></ul>`,
providers: [DataService]
})
export class AppComponent implements OnInit {
public values: any[];
constructor(private _dataService: DataService) {}
ngOnInit() {
this._dataService
.GetAll()
.subscribe(data => this.values = data,
error => console.log(error),
() => console.log('Get all complete'));
}
}
siehe http://stackoverflow.com/a/34758630/5043867 –
Was bedeutet * ohne Erfolg * hier? Was schief gelaufen ist? – TRiG