0

發送參數爲空我想實現一個簡單的形式與Angular 2.Net Core角2 http.post不Dot.Net核心

.Net Core控制器就像是這個 -

[HttpPost("[action]")] 
public async Task<IActionResult> Add(string name, string dob) 
{ 
    Profile profileToSave = new Profile 
           { 
            Name = name, 
            DateOfBirth = DateTime.Now 
           }; 
    _context.Profile.Add(profileToSave); 
    await _context.SaveChangesAsync(); 
    return Ok(profileToSave); 
} 

這是正常使用像這樣(Postman) -

enter image description here

我想在Angular 2使用此APIComponent這樣 -

public addProfileSubmit(event,name,dob): void 
{ 
    event.preventDefault(); 

    var data: { 
     name: string; 
     dob: string; 
    } = { 
      name: name, 
      dob: dob 
     }; 

    console.log(data); 

    let opts: RequestOptions = new RequestOptions(); 
    opts.method = RequestMethod.Post; 
    opts.headers = new Headers({ 'Content-Type': 'application/json' }); 

    this.http.post(this._addProfileUrl, JSON.stringify(data), opts) 
     .subscribe(res => { 
      alert("Profile Added Successfully"); 
      //this.router.navigate(['./SomewhereElse']); 

      console.log(res); 

      this.reloadAllData(); 
      this.hideAddProfileModal(); 
     }, 
     (err) => { 
      console.log(err); 
      alert("An Error Occured !!"); 
     } 
    ); 
} 

這樣,我得到這樣的請求(來自Chrome Developer Tool) -

enter image description here

所以,我創建與請求負載的請求,而不是形式的數據。

我需要使用表單數據創建請求。

任何人都可以請幫忙創建一個適當的發佈請求Angular 2

在此先感謝您的幫助。

回答

0

我已經解決它像這樣在Angular 2 -

let urlSearchParams = new URLSearchParams(); 
urlSearchParams.append('name', name); 
urlSearchParams.append('dob', dob); 
let body = urlSearchParams.toString(); 

let opts: RequestOptions = new RequestOptions(); 
opts.method = RequestMethod.Post; 
opts.headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }); 

this.http.post(this._addProfileUrl, body, opts) 
    .subscribe(res => { 
     ................. 
     ................. 
    } 
); 
+0

感謝@ ranakrunal9提供想法,我可以檢查。 –

0

嘗試在你的RequestOptions相同的設置Content-Typemultipart/form-data如下之後檢查:

let opts: RequestOptions = new RequestOptions(); 
opts.method = RequestMethod.Post; 
opts.headers = new Headers({ 'Content-Type': 'multipart/form-data' }); 
1

我不知道。淨核心,但在普通的ASP.NET活頁夾不會映射HTTP POST到參數,而是您將需要這個:

class MyModel 
{ 
    public string Name {get;set;} 
    public string Dob {get;set;} 
} 

public async Task<IActionResult> Add(MyModel input) 

它可以是它在覈心中的相同行爲。所以,如果你創建一個特殊的模型,活頁夾將映射你application/json body就好。

或者,您可以在每個參數上使用[FromBody]屬性。您可以檢查Core中是否存在類似的東西。

P.S.一些細節here

+0

它不會工作,因爲我以前嘗試過 –