2012-03-14 14 views
3

私はMVC 4のWeb APIを構築していますが、私は、要求がHTTPPost MVC 4 Web APIを

"The requested resource does not support http method 'POST'." 

マイリクエストヘッダ

User-Agent: Fiddler 
Host: localhost:53393 
Content-Length: 39 
Content-Type: application/json 

私を返すWeb APIにポストをしようとするこれまでのときリクエストボディ

{ 
    "username":"", 
    "password":"" 
} 

ルート

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

そして、私のコントローラのメソッド

[HttpPost] 
public MethodResponse Authenticate(string username, string password) 
{ 
    ConsoleServiceClient service = new ConsoleServiceClient(); 
    return service.Authenticate(username, password); 
} 

私は

http://localhost:53393/api/service/authenticate 

を使用するURL私はまだこれに新しいですが、POSTがサポートされていない理由を把握することはできませんか?あなたが現在お使いのAPIのルートで{アクション}セグメントを持っていないので、

おかげ

+0

どのように投稿リクエストを作成しますか? – gdoron

+0

私はそれをfiddlerでビルドして実行します – Armand

+0

あなたのコントローラはServiceControllerと呼ばれていますか? –

答えて

5

はあなたのURIとしてhttp://localhost:53393/api/serviceを使用してみてください。

+0

{action}をURIテンプレートに追加しました。これは、 – Armand

+0

@Armandのいずれかの方法で有効です。もっとリソース指向のアプローチをとっているなら、メソッドPost()とコントローラAuthenticateの名前をつけて、{action}は必要なく、あなたは 'service'パスセグメントを削除することができます。 –

関連する問題