2012-05-09 3 views
2

私はASP.NETのWeb APIで遊んでいると私は、次のしている:の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動詞をAction名の前に付ける必要はありません。それらを単にログオンとログオフにする方法はありますか?

私は動作しませんでした、次のことを試してみました:

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

はこれが原因ですが、私のAPIControllerにAcceptVerbs属性が異なる名前空間にあるかどうかわからない、事前に

+0

動作しません??結果は何でしたか? 404が見つかりませんか? 500サーバーエラー? – reach4thelasers

+0

要求\t GET/api /認証/ログオン?username = MyUsername&password = MyPassword HTTP/1.1 応答HTTP/1.1 405メソッドが使用できません – Dante

+0

明示的なjquery APIコールではなく、呼び出しログオンを関数としてどのように機能しますか。あなたのメソッドを構築しているフレームワークはありますか?またはちょうど省略形としてそれを使用していますか? –

答えて

2

をありがとう:

System.Web.Http.AcceptVerbs 

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

私は同じプロジェクト内に多数の通常のMVCコントローラを持っています。あなたはアクション名で始まる場合

[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); 
} 
+0

これは[System.Web.Http.AcceptVerbs( "GET")]のように機能しました。どの名前空間があなたのHttpVerbs.Getであるか分かりません。System.Web.Http.AcceptVerbsで動作するようにはできませんでした。文字列の配列が必要です。 – Dante

+0

HttpVerbs.Getが動作しなくても、ネームスペースの変更によってトリックが行われたので、私はあなたの答えを受け入れました。お返事ありがとうございます;) – Dante

+0

お世話になりましたことをうれしく思います。 – reach4thelasers

0

ASP.NETのWeb APIは推測方法にしようとします:彼らはあなたが上で説明した名前空間を使用しますが、ないAPIコントローラ

はこれを試してみてください取得、ポスト、プット、または削除。例:

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

これは、DELETEによってトリガーされることがわかります。

後方互換性として、[HttpGet]などの属性がサポートされています。

+0

ありがとう、私の質問に本当に答えなかった。私はそれがメソッド名に基づいて一致しようとしますが、PostLogoffメソッドを持つのは難しいようです。投稿のためのマークを付ける属性を持つログオフがきれいに見えるようです。 – Dante

+0

@ダンテ私は答えの最後に属性を述べました。 – Aliostad

関連する問題