2

私は ASP.NET Web API で遊んでいますが、次のものがあります。

public Guid GetLogon(string username, string password)
{
    return new X.Authentication().Logon(username, password);
}

public void PostLogoff(Guid sessionId)
{
    new X.Authentication().Logoff(sessionId);
}

これは、次のようにクライアント側から呼び出されています。

$(document).ready(function () {
    logon("MyUsername", "MyPassword", function (guid) {
        $("#sessionId").html(guid);

        logoff($("#sessionId").html(), function () {
            //Logged out action here
        });
    });        
});

これはすべて機能しますが、GetLogon や PostLogoff のように、アクション名の前に http 動詞を付ける必要はありません。ログオンとログオフだけにする方法はありますか?

次のことを試しましたが、うまくいきませんでした:

[System.Web.Mvc.AcceptVerbs(HttpVerbs.Get)]
public Guid Logon(string username, string password)
{
    return new X.Authentication().Logon(username, password);
}

[System.Web.Mvc.AcceptVerbs(HttpVerbs.Post)]
public void Logoff(Guid sessionId)
{
    new X.Authentication().Logoff(sessionId);
}

前もって感謝します

4

2 に答える 2

2

これが原因かどうかはわかりませんが、私の APIController では AcceptVerbs 属性が別の名前空間にあります:

System.Web.Http.AcceptVerbs

と属性が同じ名前空間に[HttpGet]ある[HttpPost]

同じプロジェクトに多数の通常の MVC コントローラーがあります。上記の名前空間を使用しますが、API コントローラーは使用しません

これを試して:

[System.Web.Http.AcceptVerbs("GET")]
public Guid Logon(string username, string password)
{
    return new X.Authentication().Logon(username, password);
}

[System.Web.Http.AcceptVerbs("POST")]
public void Logoff(Guid sessionId)
{
    new X.Authentication().Logoff(sessionId);
}
于 2012-05-09T16:08:21.953 に答える
0

Get、Post、Put、または Delete でアクション名を開始すると、 ASP.NET Web API はメソッドを推測しようとします。例えば:

public void DeleteItem(int id)
{
    ...
}

動作し、システムは DELETE によってトリガーされることを認識します。

下位互換性として、[HttpGet]etc 属性がサポートされています。

于 2012-05-09T16:12:32.453 に答える