2017-06-01 79 views
0

我试图通过从Angular2向http Web API端点执行http post来插入记录。在Angular中,对象包含数据,但是当它到达端点时,没有数据。它是空的。你能通过这段代码看到我做错了什么吗?使用POST从Angular2发送时Web API对象为空

角:

public addBook (body: Object): Observable<Book[]> { 
    let bodyString = JSON.stringify(body); //stringify payload 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    // post request to create new book 
    return this._http.post(this.actionUrl,bodyString,options) 
     .map((res:Response) => res.json()) 
     .catch((error:any) => Observable.throw(error.json().error || 'Server error')); 
} 

的ASP.NET Web API

// POST: api/Books 
    [System.Web.Http.HttpPostAttribute] 
    [HttpOptions] 
    [ResponseType(typeof(Book))] 
    public async Task<IHttpActionResult> PostBook(Book book) 
    { 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 

    db.Books.Add(book); 
    await db.SaveChangesAsync(); 

    return CreatedAtRoute("DefaultApi", new { id = book.Id }, book); 
    } 

回答

0

终于得到它的工作。下面是我使用的代码:

角:

public createService (url: string, param: any): Observable<any> { 
    let body = JSON.stringify(param); 
    let headers = new Headers({ 'Content-Type': 'application/json; charset=utf-8'}) 
    let options = new RequestOptions({ headers: headers }); // create a request option 

    // post request to create new book 
    return this._http 
     .post('http://localhost:1234/api/Books/', body, options) 
     .map((res: Response) => res.json()) 
     .catch((error: any) => Observable.throw(error.json().error || 'Server error')); 
} 

的Web API

// POST: api/Books 
    [HttpPost] 
    public async Task<IHttpActionResult> PostBook(Book book) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     db.Books.Add(book); 
     await db.SaveChangesAsync(); 

     return CreatedAtRoute("DefaultApi", new { id = book.Id }, book); 
    } 

在网络API,WebApiConfig.cs我将这两行的注册方法:

// port number of client 
var cors = new EnableCorsAttribute("http://localhost:9000", "*", "*"); 
config.EnableCors(cors); 

在Web.config中,我添加了这些行:

<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
    <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" /> 
    </customHeaders> 
</httpProtocol> 

我还添加了nuget包:Microsoft.AspNet.WebApi.Cors

相关问题