Javascript 如何使用Angularjs的route属性将route和post参数传递给WebApi2

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

我正在尝试将我的Web api代码迁移到Web api 2,但有点无法理解如何让它与angular js一起工作。我在网上没有找到这样的例子

这是我的控制器代码:

[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;