Javascript 如何使用Angularjs的route属性将route和post参数传递给WebApi2
我正在尝试将我的Web api代码迁移到Web api 2,但有点无法理解如何让它与angular js一起工作。我在网上没有找到这样的例子 这是我的控制器代码:Javascript 如何使用Angularjs的route属性将route和post参数传递给WebApi2,javascript,angularjs,asp.net-web-api,Javascript,Angularjs,Asp.net Web Api,我正在尝试将我的Web api代码迁移到Web api 2,但有点无法理解如何让它与angular js一起工作。我在网上没有找到这样的例子 这是我的控制器代码: [RoutePrefix("api/v2/bids")] public class BidsController : ApiController { [Route("{quoteId:long}/accept")] public HttpResponseMessage AcceptShipmentQuote(long
[RoutePrefix("api/v2/bids")]
public class BidsController : ApiController
{
[Route("{quoteId:long}/accept")]
public HttpResponseMessage AcceptShipmentQuote(long quoteId,[FromBody] string data)
{
HttpResponseMessage response;
response = Request.CreateResponse(HttpStatusCode.Accepted, quoteId);
return response;
}
}
在angular JS上,我有以下代码:
function acceptQuote(quoteId, data, fnSuccess, fnError) {
return $resource("/api/v2/Bids/:quoteId/accept", { quoteId: "@quoteId", data: "@data" },
{ "AcceptQuote": { method: "POST", isArray: false } })
.AcceptQuote(quoteId, data, fnSuccess, fnError);
}
但这并不像在fiddler中那样有效,我看到quoteId在uri中没有被替换,我确信在我传递了它之后,下一步将发现数据没有作为post进入方法
这是我在fiddler响应中得到的错误
{"Message":"No HTTP resource was found that matches the request URI 'http://127.0.0.1:82/api/v2/Bids/accept'.","MessageDetail":"No type was found that matches the controller named 'v2'."}
有人能帮我找到正确的方法让它工作吗
问候
Kiran调用AcceptQuote()
应该传递带有参数的对象(而不仅仅是quoteId值)。如上所述,摘录:
可以使用以下参数调用类对象或实例对象上的操作方法:-非获取“类”操作:Resource.action([parameters]、postData、[success]、[error])
因此,这应该是可行的:
function acceptQuote(quoteId, data, fnSuccess, fnError) {
return $resource("/api/v2/Bids/:quoteId/accept", { quoteId: "@id"},
{ "AcceptQuote": { method: "POST", isArray: false } })
.AcceptQuote({ id : quoteId }, data, fnSuccess, fnError);
传递的第一个对象AcceptQuote()
现在包含参数
对象,将在该对象中搜索名为quoteId
的属性,以将其注入url
要使用ASP.NET Web API使用任何作为JSON传递的“数据”,我们应该/必须创建一个对象/实体。如果JSON是这样的:
{
"MyProperty1" : "MyValue1",
"MyProperty2" : "MyValue2",
}
然后C#对象:
控制器操作应如下所示:
public HttpResponseMessage AcceptShipmentQuote(long quoteId, MyObject myObject)
{
var prop1 = myObject.MyProperty1;
var prop2 = myObject.MyProperty2;
我试过了,但是现在它生成了一个错误的uri,就像
http://127.0.0.1:82/api/v2/Bids/accept?quotedId=101
但我期待http://127.0.0.1:82/api/v2/Bids/101/accept
可能吗?我更新了答案。我将@quotedId
重命名为@id
。该语法的意思是:搜索名为id
的属性。然后应注入Ths以代替:quoteId
。请检查拼写,确保名称中没有inocrectnes。这就是为什么Angular没有找到parmater并将其作为查询字符串paramThank追加的原因,必须做一个小的更改,必须将/api/v2/Bids/:quoteId/accept
更改为/api/v2/Bids/:id/accept
,现在我看到uri中的参数更新了,但是webapi仍然无法接受post参数,不确定在何处将其定义为参数。感谢您的帮助,我将关闭此线程并为webapi问题启动另一个线程,因为我认为传递简单类型的post参数是一个完全不同的问题。Angular和Web API。。。不错的选择;)我也这么做了。我会说,你非常接近。Just web API旨在转换作为对象进入请求体的数据/JSON。这个框架将为我们反序列化。我们仍然可以进入该过程,例如,使用某些属性。。。
public HttpResponseMessage AcceptShipmentQuote(long quoteId, MyObject myObject)
{
var prop1 = myObject.MyProperty1;
var prop2 = myObject.MyProperty2;