2017-01-01 9 views
0

私は、angularJS 2 httpで動作するpostメソッドを取得しようとしています。角度2 http postメソッドが失敗しました

次のように私の残りの呼び出しは次のとおりです。

saveCourse(Course: any) { 
    let url ='https://server/CoursesWebApi/api/courses/insert'; 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    headers.append('Accept', 'application/json'); 
    let options = new RequestOptions({ headers: headers}); 
    return this._http.post(url, { data: Course }, options) 
     .toPromise() 
     .then(res => res.json().data) 
     .catch((err: any) => { 
      console.log(err); 
      return Promise.reject(err); 
     }); 
} 

文字列化コースのオブジェクトは、次のようになります。

"{" タイトル ":" テストタイトル」、 "AuthorId": "スコット・アレン"、 "カテゴリ": "ソフトウェア アーキテクチャ"、 "CourseLength": "2"、 "CourseId": "テストID"}」

Iは文字列化と非両方を試みました文字列化されたバージョン。私はクロームでデバッグするとき、私は両方のバージョンの次のエラーを取得する:

ステータス応答:URL 0:ヌル

私の理解では、0(ゼロ)の状態がそれを意味しますwebapiサーバーにそれを作ったことはありませんでした。私はCORSを有効にしており、サンプルのreactJSアプリケーションで同様のメソッドを使用しています。これはAxiosを使用して同じWebAPIを呼び出すことで動作します。私は不眠症のJSONツールをインストールし、次のようなJSON形式を使用してポストを実行し、それが働いた:

{ 「CourseId」:「スティーブ」、 「AuthorId」:「コーリーハウス」、 「タイトル」 : "テストタイトル"、 "CourseLength": "12時40分"、 "カテゴリー": "テストカテゴリ"}

私は私が間違っているのかわからないです。私のasp.net WEBAPIは次のようになります。

[HttpPost] 
[Route("CoursesWebApi/api/courses/insert/")] 
public IActionResult PostCourse([FromBody] Course course) 
{ 
    if (!ModelState.IsValid) 
    { 
     return HttpBadRequest(ModelState); 
    } 

    _context.Course.Add(course); 
    try 
    { 
     _context.SaveChanges(); 
    } 
    catch (DbUpdateException) 
    { 
     if (CourseExists(course.CourseId)) 
     { 
      return new HttpStatusCodeResult(StatusCodes.Status409Conflict); 
     } 
     else 
     { 
      throw; 
     } 
    } 

    return Ok(); 
} 

を最後に、私はシオマネキを使用するときに私は、Web APIに次のエラーを参照してください。

HTTP/1.1 400不正なリクエストのContent-Type:アプリケーション/ json;アクセス制御を許可するヘッダー:コンテンツタイプ、承諾、Xが要求したもの: X:アクセス許可を許可するヘッダー:サーバー:Kestrel X-Powered-By:ASP.NETアクセス制御許可元-File-Nameアクセス制御許可メソッド:GET、POST日付:Sun、01 Jan 2017 16:15:15 GMT Content-Length:37

{"":["サポートされていないコンテンツタイプ" "]}

投稿方法の多くの異なる設定を無駄にしようとしました。これを3日間作業しているので、どんな助けもありがとうございます。

EDIT 私は問題を解決できませんでした。私のWeb APIは、新しいasp.netコアとEF 7を使用していました.EF 6とASP.Net 4.5.2を使用して書き直しました。私は問題を引き起こしていた私のウェブAPIに欠けていた何かがあったと思う。あなたのPostCourse APIメソッドは以下[FromBody]

  //public IActionResult PostCourse([FromBody] Course course) 

になりますよう、本体にデータを送信する必要が

+0

'_http.post(url、body、options)'を送信する前に 'var body = JSON.stringify(Course)'データをストライ化し、apiが意図したコンテンツタイプを処理できることを確認してください。 '[FromBody]'属性も削除してください。複雑なオブジェクトから単純な型を抽出するために使用されます – Nkosi

答えて

0

は観測を使った例です:

  public saveCourse(Course: any): Observable<Course> { 
        let url ='https://server/CoursesWebApi/api/courses/insert'; 
        let body: string = JSON.stringify(Course); 
        let headers = new Headers(); 
        let headers.append('Content-Type', 'application/json'); 
        let options = new RequestOptions({ headers: this.headers }); 

        return this.authHttp.put(this.url, body,options) 
         .map((res: Response) => { 
            return res; 
           }) 
          .catch((error: any) => { 
           // Error on post request. 
           return Observable.throw(error); 
         }); 
       } 
1

文字列化データ

var body = JSON.stringify(Course); 

送付前

_http.post(url, body, options) 

[FromBody]属性も削除してください。複雑なオブジェクトから単純な型を抽出するために使用されます。

参考:あなたはすでにあなたのヘッダに アクセス制御 - 許可 - 起源、*を追加しようとクロームでCORSを有効にした場合Parameter Binding in ASP.NET Web API

アクションはこの

[HttpPost] 
[Route("CoursesWebApi/api/courses/insert/")] 
public IActionResult PostCourse(Course course) { ... } 
+0

申し訳ありません。私はちょうどその例としてそれを入れました。私は実際のURLに投稿を更新しました... – steveareeno

+0

@steveareeno私は答えを – Nkosi

+0

残念ながら、同じエラーを更新しました。 – steveareeno

0

ように終わるでしょう。同様の問題があり、これが役に立ちます。

関連する問題