ASP.NET返回null或没有来自angular4的连接

时间:2017-11-09 14:30:33

标签: asp.net json angular backend

我正在尝试将JSON字符串从angular发送到asp.net服务器。我尝试了两件事来从客户端获取这些数据。

第一:我从服务器端和客户端都有以下代码。我发送一个json字符串,我希望在后端收到我发送的内容。但是,我只是在获取数据之前得到此服务器错误。

  

POST“url”404(未找到)   {“Message”:“找不到与请求URI'http://localhost:61476/api/testAPI/getData'匹配的HTTP资源。”,“MessageDetail”:“在控制器'getData'上找不到与请求匹配的操作。”}

第二次:鉴于一切都相同,我只是在我的方法中添加[FromBody],如下所示。这不会返回任何服务器错误,我可以从客户端连接到服务器。但是,我的正文消息为 null 。我尝试使用Postman,但是当我发送相同的数据时,似乎它与Postman一起正常工作..我知道我可以在服务器代码中创建一些建模以匹配来自客户端的我的json字符串,但我不明白为什么如果没有建模,这不起作用,以及没有[FromBody]的连接失败的原因。

我需要的只是从客户端获取JSON字符串。有人可以就此给我提供建议吗?

  

public string getData([FromBody] string body)

有角度

  callServer(){
    var json = {"name":"John Doe", "school": "A"};
    let headers = new HttpHeaders();  
    headers.set('Content-Type', 'application/json');

    this.appService.http.post('http://localhost:61476/api/testAPI/getData', 
                              json, 
                              {headers: headers})
      .subscribe(data => {console.log(data), (err) => console.error("Failed! " + err);
      })
  }

服务器

    namespace test.Controllers
{
    public class testAPIController : ApiController
    {

    //

    [HttpPost]

    public string getData(string body)
    {
        try
        {
            Log.Info(string.Format("data {0}", body));
            return "ok";
        }

        catch (Exception ex)
        {
            Log.Error(ex.Message);
            return "error";
        }
    }
}}

2 个答案:

答案 0 :(得分:0)

控制器:

[HttpPost]

public string postData([FromBody]string body)
{
    try
    {
        Log.Info(string.Format("data {0}", body));
        return Json("ok");
    }

    catch (Exception ex)
    {
        Log.Error(ex.Message);
        return "error";
    }
}

致电服务器:

callServer() : Observable<string> {
    var json = {"name":"John Doe", "school": "A"};
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers }); 
    let apiUrl = 'http://localhost:61476/api/testAPI/postData';

    return this.appService.http.post(`${this.apiUrl}`, json, options)
       .map((res: Response) => res.json())
       .catch(this.handleErrorObservable);
  }

private handleErrorObservable(error: Response | any) {
    console.error(error.message || error);
    return Observable.throw(error.message || error);
}

致电服务:

this._service.callServer()
    .subscribe(
        res => { console.log(res) },
        err => { console.log(err) }
    )

console.log(res/err)将是您来自POST电话的回复。对不起,如果误解了你的问题,但你的问题有点难以理解。

答案 1 :(得分:0)

404错误“未找到”。您必须装饰您的API类

[Route("api/TestApi/[action]")]
public class testAPIController : ApiController
{

    [HttpPost]
    [HttpPost, ActionName("getData")]
    public string getData([FromBody]string body)
    {}
}