2017-04-08 107 views
0

我想调用一个简单的方法使用TypeScript代码,也与Chrome高级休息客户端,我得到404错误。C#WebApi POST方法和TypeScript

的WebAPI方法

[HttpPost] 
[Route("api/offert/TestPost")] 
public IHttpActionResult TestPost(int idid) 
{ 
    //http://localhost/prova/api/offert/TestPost 

    var anonymousTypeVar = new { x = 15, y = 120 }; 
    return Json(anonymousTypeVar); 
} 

打字稿代码

var data = { idid: 1}; 

this.baseUrl = 'http://localhost/prova/api/offert/'; 
this.http.post(this.baseUrl + "TestPost", JSON.stringify(data), 
this.getRequestOptions) 
     .map(response => response.json()) 
     .subscribe(); 

在这一刻,我仍然得到404错误...

我知道我可以连接的网址通过“? idid = 1“作为参数,但我想传递一个Json字符串到webmethod ...

我该如何去查代码?

感谢

+1

你确定它是'http:// localhost /'而不是'http:// localhost:XXXX /'XXXX是某个端口号吗?您是否尝试在浏览器中查看该网址?任何结果? –

+0

为什么在那里有'prova',那是对的吗? –

+0

是的,我相信网址是正确的... 如果我将它从HttpPost更改为HttpGet,我用直接url调用它:“http:// localhost/prova/api/offert/TestPost?idid = 1”我可以得到回应 – DarioN1

回答

1

,如果你的JSON数据的问题,我不知道......我肯定会MVC URL或机身采用键值对高高兴兴地映射到一个简单的参数,即

idid=1 -> int id 

但你会路过:

{ idid: 1 } 

需要被映射到...

public class OffertRequest 
{ 
    public int idid { get; set; } 
} 

所以,你的API是:

public IHttpActionResult TestPost(OffertRequest idid) 

Alernatively,通过在请求主体只是一个键/值对。

+0

好的,谢谢,您的解决方案肯定有效,但我该如何保持webapi参数原样并将其称为传递键/值? – DarioN1

+0

简单HTTP POST的格式与邮件正文中的idid = 1一样简单 - 因此,在使用JSON.stringify的地方,您应该只是传递此信息。 – Fenton