2017-03-14 14 views
0

私はAng 2のhttpからWeb Apiに投稿要求を送信していますが、私は500のエラーを受け取ります。私は、その内部サーバーのエラーを知っているので、私はいくつか間違いが要求をreciveingしている。しかし、私はそれを把握できません。 Informaの上についてAngular 2 http .Net Core Web APIのApi 500のエラー

ページコンポーネント

import { Component , OnInit } from '@angular/core'; 
import { NavController } from 'ionic-angular'; 
import { FormGroup, FormControl, FormBuilder, Validators } from '@angular/forms'; 
import { Observable } from 'rxjs/Observable'; 
import { UserInformation } from '../../providers/user-information'; 
import { Employee } from './bruker'; 


@Component({ 
    selector: 'page-account-creation', 
    templateUrl: 'account-creation.html', 
    providers: [UserInformation] 
}) 

export class AccountCreationPage implements OnInit { 

    constructor(public navCtrl: NavController, private userInformation: UserInformation, private _fb: FormBuilder) { 

    this.userInformation = userInformation; 

} 

    public myForm: FormGroup; 
    bruker: Employee; 



    ionViewDidLoad() { 

    } 

    ngOnInit() { 


    // the short way 
     this.myForm = this._fb.group({   
      Employee: this._fb.group({ 
       EmployeeID: ['', <any>Validators.required], 
       FirstName: [], 
       LastName: []    
      }) 
     }); 

    this.userInformation.getlogin().subscribe(
       data => console.log(data), 
       err => console.log(err), 
       () => console.log('Task Complete')); 
    } 

    onSubmit(model: Employee) { 

    console.log(model); 

    var x = this.userInformation.createuser(model).subscribe(
       data => console.log(data), 
       err => console.log(err), 
       () => console.log('Post Complete')); 

    } 



} 

サービス

import { Injectable } from '@angular/core'; 
import { Http, Response , Headers, RequestOptions, URLSearchParams} from '@angular/http'; 

    import { Observable } from 'rxjs/Observable'; 
    import 'rxjs/add/operator/catch'; 
    import 'rxjs/add/operator/map'; 
    import { Employee } from '../pages/account-creation/bruker'; 

    @Injectable() 
    export class UserInformation { 

    private Url = 'http://localhost:63817/api/Bruker/'; // URL to web API 
    headers: Headers; 
    options: RequestOptions; 

     constructor(private http: Http) { 

     } 

     createuser(bruker: Employee): Observable<Response>{ 

     console.log(JSON.stringify(bruker)); 



      let bodyString = JSON.stringify(bruker); // Stringify payload 
      // let headers  = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON 
      // let options  = new RequestOptions({ headers: headers }); 


      return this.http.post(this.Url + "NyBruker", bodyString,{headers: this.getHeaders()}) 
      .map(response => response.json(), 
       error => { debugger; }); 



     } 

     private getHeaders(){ 
     let headers = new Headers(); 
     headers.append('Accept', 'application/json'); 
     return headers; 
     } 

    } 

のREST API

using Crashy_Backends.Model; 
using Crashy_Backends.Services; 
using Crashy_Backends.Services.Interfaces; 
using Microsoft.AspNetCore.Mvc; 
using Newtonsoft.Json.Linq; 
using Microsoft.AspNetCore.Routing; 
using System.Net.Http; 
using System.Net; 

namespace Crashy_Backends.Controllers 
{ 

    public class Employee 
    { 
     public int EmployeeID { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 

    [Route("api/[controller]")] 
    public class BrukerController : Controller 
    { 


     private IBrukerService _BrukerService; 

     public BrukerController(IBrukerService BrukerService) 
     { 
      this._BrukerService = BrukerService; 
     } 


     [Route("NyBruker")] 
     [HttpPost] 
     public Employee NyBruker([FromBody]Employee bruker) 
     { 
      var x = bruker.EmployeeID; 
      return bruker; 
     } 

    } 
} 
+0

いただきまし例外::)

はこれを試してみてください? –

+0

どうすれば例外にアクセスできますか?私はcordovaでハイブリッドアプリを構築しているので、外部ソースからwebApiを呼び出しています。 – stian64

+0

Web APIプロジェクトで例外にアクセスします。呼び出しているコントローラにブレークポイントを設定してそこから取得することができます。クライアント側から、レスポンスをコンソールに出力し、例外が500ステータスに付属するレスポンスに追加されているかどうかを確認することができます。 –

答えて

0

あなたが提供した、私自身の経験から、おそらく問題はdependency injectionにあります。 依存性注入サービスにIBrukerServiceを追加しましたか?Startup.cs?アプリケーション/ JSON

  • への要求のコンテンツタイプヘッダを設定し services.AddTransient<IBrukerService, BrukerService>();

    https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/dependency-injection

  • +0

    はい私はこの行を追加しました:services.AddSingleton ();私はAddsingletonとAddTransientの違いを知りません。それと一緒に何かできますか? – stian64

    +0

    コンストラクタを 'Controller'から削除して、その問題がDIにないことを確認します。 – Brivvirs

    +0

    シングルトン有効期間サービスは、初めて要求されたときに作成され、その後のすべての要求で同じインスタンスが使用されます。あなたのサービスにシングルトンを使用しないでください。それについての素晴らしい文書があります。 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection – Brivvirs

    0
    1. あなたのEmployeeクラスの定義は、#1はしかし、あなたの問題を解決しますかなり確信して

    に一致することを確認してください。

    return new Headers({ "X-Requested-With": "XMLHttpRequest", "Content-Type": 'application/json' }); 
    
    +0

    私もそうだと思います。私は現在、このメソッドをプライベートgetHeaders(){ let let headers = new Headers(); ヘッダー。append( 'Accept'、 'application/json'); リターンヘッダー。 }と呼ばれ、postメソッドの内部から呼び出されます。私はそれを正しく宣言する方法がわかりません、私はまた、このヘッダー=新しいヘッダー({'Content-Type': 'application/json'})を試しました。パラメータ: – stian64

    +0

    私は家に帰るときにそれを試してみましょう)のヘッダーを送信します; – stian64

    +0

    それは多くの助けをdidntのようだが、問題はこれについて何かする必要があります。私はコンソールでこの応答を得る。オプションhttp:// localhost:63817/api/Bruker/NyBruker 415(サポートされていないメディアタイプ)とXMLHttpRequestは、http:// localhost:63817/api/Bruker/NyBrukerをロードできません。プリフライトの応答に無効なHTTPステータスコード415があります – stian64

    関連する問題