2017-02-24 13 views
0

こんにちは、私はangularjsでWeb APIアプリケーションを開発しています。私は1つのコントローラに3つのメソッドを用意しており、どれも呼び出していません。たとえば、Web APIで複数のgetメソッドを呼び出す方法

public class usersController : ApiController 
    { 
     //First Get method. 
     [HttpGet] 
     [SuperAdmin] 
     [LoginCheck] 
     [ActionName("me")] 
     public HttpResponseMessage me() 
     { 
     } 

     //second Get method. 
     [LoginCheck] 
     [SuperAdmin] 
     public IHttpActionResult Get(int id) 
     { 

     } 

     //third Get method. 
     [HttpGet] 
     [LoginCheck] 
     [SuperAdmin] 
     public HttpResponseMessage Get(string role) 
     { 
     } 

私は以下のコードを使用して呼び出しています。

this.getSubs = function() { 
     var role = "SUPER_ADMIN"; 
     //role is optional here 
     var url = '/api/users/' + role; 
     return $http.get(url).then(function (response) { 
      return response.data; 
     }); 
    } 
    this.getcurrentuser = function() { 
     var url = '/api/users/me/'; 
     return $http.get(url).then(function (response) { 
      return response.data; 
     }); 
    } 
    this.getSubsbyID = function (id) { 
     var url = '/api/users/' + id; 
     return $http.get(url).then(function (response) { 
      return response.data; 
     }); 
    } 

ルーティングは次のとおりです。

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

anglejsを使用して3つの方法のいずれも呼び出せません。私はどこが間違っているのか分かりますか?どんな助けもありがとう。ありがとうございました

+0

これらのメソッドを実装したサービス(またはコントローラ)を投稿できますか?この問題は多くの理由から可能ですが、より多くの情報を提供してください。 – lealceldeiro

+0

あなたがルーティングの問題だと思われる場合は、ルーティングも投稿してください – lealceldeiro

+0

ありがとうございます。あなたがリソースをロードできませんでした:サーバーは400(Bad Request)のステータスで応答しましたhttp:// localhost:22045/api/users/SUPER_ADMIN –

答えて

1

これはCORSリクエストであるリクエストに問題があるかもしれない2つです。 CORSを有効にする必要があります。最初に、Microsoft.AspNet.WebApi.Corsというナゲットパッケージをインストールして、ルーティング呼び出しの前にapi設定ファイルに追加することをお勧めします。

config.EnableCors(); 

次に、属性ルーティングを使用するようにルーティングを調整すると便利な場合があります。 WebApiは、通常のMVCコントローラのようなアクションルーティングをサポートしていません。あなたは、これはあなたがコントローラのユーザーを呼び出すことができるようになる

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

のようなものをお使いの設定ファイルにいくつかすでにルーティングセットアップを持っているかもしれませんが、私はそれが問題の署名を使用して適切なGETメソッドを呼び出すためにApiControllerを取得しようと見つけます。属性ルーティングを使用することをお勧めします。それがまだ存在しない場合は、設定に属性ルーティングを追加することができます

config.MapHttpAttributeRoutes(); 

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

次に、HttpGet属性のルーティングを設定することができます。

public class usersController : ApiController 
{ 
     //First Get method. 
     [HttpGet] 
     [SuperAdmin] 
     [LoginCheck] 
     [Route("api/users/me")] // this is your routing attribute 
     public HttpResponseMessage me() 
     { 
     } 

     //second Get method. 
     [LoginCheck] 
     [SuperAdmin] 
     [Route("api/users/{id:int}")] 
     public IHttpActionResult Get(int id) 
     { 

     } 

     //third Get method. 
     [HttpGet] 
     [LoginCheck] 
     [SuperAdmin] 
     [Route("api/users/{role}")] 
     public HttpResponseMessage Get(string role) 
     { 
} 

希望します。

+0

ありがとうございます。私はページの読み込み時に3つのapiを呼び出しています。ページの負荷が3回私は同じ下のURLに当てています。 [ルーティング( "api/users/{role}")] public HttpResponseMessage Get(文字列ロール) –

+0

ルーティング設定を更新し、config.MapHttpAttributeRoutes()を追加しましたか?その行がなければ[Route]は機能しません。また、これは他のルーティングの前にある必要がありますが、config.EnableCors()の後にする必要があります。 (コルスを使用している場合) – Woot

+0

Cors iは有効で問題はありません。 config.MapHttpAttributeRoutes();私が持っています。 –

関連する問題