2016-05-17 7 views
0

私は、Web APIにパラメータを渡すことにかなり苦労しています。anglejsからweb apiで複数のタイプのパラメータを渡すにはどうすればいいですか?

2つのケースがありますが、両方をリストします。

  1. 私は私のangularjsコントローラで、このようなURLを作成していたため

    [HttpGet] 
        public string VerifyName(string name) 
        { 
    
         return name + "hi"; 
        } 
    

以下、このような単純な文字列のparamを渡したいです。

var name = "hello"; 
      var msg = ""; 
      $http.get('/api/VisitorWeb/VerifyName', name).success(function (data) { 
       msg = data; 
      }).error(function (data) { 
       $scope.error = "An error has occured while adding! " + data; 
      }); 

これはまた404

同様
{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:43516/api/VisitorWeb/VerifyName'.","MessageDetail":"No action was found on the controller 'VisitorWeb' that matches the request."} 
  1. 私はそれは同じ結果に

マイ角度機能

var loginModel = { 
      UserName: $scope.UserName, 
      PassWord: $scope.Password 
     }; 

     var msg = ""; 
     $http.get('/api/VisitorWeb/VerifyLogin', loginModel).success(function (data) { 
      msg = data; 
     }).error(function (data) { 
      $scope.error = "An error has occured while adding! " + data; 
     }); 
を与えているオブジェクトを渡すためにしようとしています戻って保持します

ウェブアピ方法

[HttpGet] 
    public string VerifyLogin(UserLoginDomainModel loginModel) 
    { 
     //do some business logic 
     return "abc "; 
    } 

応答が基本であるルーティングといくつかの問題があるが、いくつかの方法がありません、それが何であるかを把握することができWebApiConfig

私は考えてい
public static void Register(HttpConfiguration config) 
     { 


config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 

     config.MapHttpAttributeRoutes(); 

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

です、提案してください

+0

複雑なオブジェクトをPOSTするのに最適 – dbugger

+0

最初に、あなたのパスのベースURLのフルURLについて言及していないことに気付きました。それには 'localhost'も含める必要があります –

+0

http://stackoverflow.com/questions/19049989/web-api-複合メソッドのオブジェクトとしてのメソッドの取得 – dbugger

答えて

-2

これを試してみてください:

$http({ method: "GET", url: "/api/VisitorWeb/VerifyName", params: { name: name} }).success() 
+0

同じエラーが発生しています – ankur

1

このアクション:属性は、ルーティングなしで定義

[HttpGet] 
public string VerifyName(string name) 
{ 
    return name + "hi"; 
} 

は、次のURLにルーティングする標準的な慣習にマッピングされている:あなたのルートテンプレート"api/{controller}/{action}/{id}"id(ないname)という名前のパラメータを想定しているため

http://yourhost/apiVisitorWeb/VerifyName?name=myNameValue 

URIの一部であること。

あなたがあるとして、どちらかあなたのルーティングを使用し続けるあなたはこのアドレスを使用することができるはずですので、上記のURIを使用するか、idにあなたのパラメータの名前を変更する場合:

http://yourhost/apiVisitorWeb/VerifyName/myNameValue 

同じことが当てはまりますGETアクションでは、複雑なパラメータはすべて、クエリ文字列パラメータのコレクションとしてURIからバインドされることが期待されます。 2番目の操作は、次のURIにバインドされます:

http://yourhost/apiVisitorWeb/VerifyLogin?UserName=userNameValue&PassWord=myPassword 

しかし、これは多くの理由(上のセキュリティ)の悪い習慣です。このようなアクションをPOSTアクションに変えることを強くお勧めします。そうすれば、モデルをリクエストの本体として送信することができます。

関連する問題