1

サーバー上にfooというエンティティがあり、バーのリストが割り当てられています。fooから1つのバーを削除できるようにしたい。

ただし、fooは大きなオブジェクトであるため、クライアント側を更新してfoo全体を送信したくないので、fooから1つのバーを削除するだけの場合は、毎回多くのJsonが送信します。

バーを送信して、fooエンティティから削除したいだけです。

私は私のクラスfooを持っています

public class Foo
{
    public Foo()
    {
        Bars = new Collection<Bar>();    
    }

    public ICollection<Bar> Bars { get; set; }
}

ルートをマッピングしました

routes.MapHttpRoute(
    name: "fooBarRoute",
    routeTemplate: "api/foo/{fooId}/bar/{barId}",
    defaults: new { controller = "Bar", action = "RemoveBarFromFoo" }
    );

javascript(coffeescript)を介してリクエストを送信する

$.ajax(
url: api/foo/1/bar/1,
data: jsonData,
cache: false,
type: 'XXX',
....

使用するルートがわからないので、PUTを試しましたが、気に入らず、間違っている可能性があります。この状況でどのルートを使用すべきかよくわかりません。

public class BarController : ApiController
{
    public void RemoveBarFromFoo(int fooId, Bar bar)
    {    
        // get the foo from the db and then remove the bar from the list and save
    }
}

私の質問:この目標を達成するためにどのルートを使用する必要がありますか?または、これを間違った方法で行っている場合は、どうすればよいですか?

ありがとう、ニール

4

1 に答える 1

3

Delete標準のRESTful規則に従うには、使用しているHTTP動詞がDELETEであり、アクション名が呼び出されている必要があります。また、このアクションはBarオブジェクトをパラメーターとして使用しないでください。barIdクライアントが送信するのはそれだけだからです。

public class BarController : ApiController
{
    public void Delete(int fooId, int barId)
    {    
        // get the foo from the db and then remove the bar from the list and save
    }
}

そしてあなたは電話します:

$.ajax({
    url: 'api/foo/1/bar/1',
    type: 'DELETE',
    success: function(result) {

    }
});

これで、どのアクションを呼び出すかを指示するのはHTTP動詞であるため、yuoはルート定義からアクションを削除できます。

routes.MapHttpRoute(
    name: "fooBarRoute",
    routeTemplate: "api/foo/{fooId}/bar/{barId}",
    defaults: new { controller = "Bar" }
);
于 2012-07-13T09:47:20.007 に答える