我正在尝试将我的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;
}
}
角度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);
}
但这不像小提琴手那样工作我看到 quoteId 没有在uri中被替换,我相信在我通过之后,接下来会发现数据没有作为帖子进入该方法。
这是我对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'."}
有人可以用正确的方法帮我解决这个问题吗?
此致 基兰
答案 0 :(得分:0)
调用AcceptQuote()
应该传递带参数的对象(而不仅仅是 quotedId 值)。正如in detail here所述,提取物:
可以使用以下参数调用类对象或实例对象上的操作方法:
- 非GET“类”操作: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()
现在包含parameters
对象,将搜索一个名为quoteId
的属性,并将其注入到网址
要使用任何“数据”,使用ASP.NET Web API作为JSON传递,我们应该/必须创建一个对象/实体。所以,如果JSON就像:
{
"MyProperty1" : "MyValue1",
"MyProperty2" : "MyValue2",
}
然后是C#对象:
public class MyObject
{
public string MyProperty1 { get; set; }
public string MyProperty2 { get; set; }
}
Controller操作应该如下所示:
public HttpResponseMessage AcceptShipmentQuote(long quoteId, MyObject myObject)
{
var prop1 = myObject.MyProperty1;
var prop2 = myObject.MyProperty2;