2016-05-30 9 views
1

Web Apiを使用し始めました。私はすべてのWeb APIリクエストのための1つのマスターメソッドを作成しようとしました。スナップショットのメソッド名GetMenu()とパラメータはuserpkidになります。asp.netでweb api URLの一般的なメソッドを作成する方法MVC4

snapshot 1

今、私は、Web APIの一般的な方法を作成しようとします。リクエスト時にWeb APIから来て、メソッド名とパラメータを分離するよりも、どのメソッド名を動的に呼び出してパラメータを渡すよりも。要求の例は、メニューコントロールの場合は、国のコントロールのために来た場合は、メソッド名とパラメータのどんなメソッド名とパラメータのための国のコントロールに行くよりも、彼らはどのようなメソッド名とパラメータのメニューコントロールに行く。ので、どのように私はこれを達成することができます。..

Snapshot 2

+0

はあなたのクライアントのリクエストヘッダにたsourceTypeのPARAMを追加し、WEBAPIでHttpRequestHeadersからそれを抽出したsourceTypeに基づいて、セグメントあなたの関数。一定のソートタイプがある場合は、サービスAPIでその目的の列挙を行うことができます。次に、あなたのCommonWebApiMethodをセグメント化するためにスイッチケースを使用します。 SourceTypeはあなたのコントロールになることができます – Pushpendra

+0

こんにちは、Web APIのURLから、私はコントローラ名、メソッド名、パラメータを区別しません。 –

答えて

1

をソリューションは、パラメータ名が重要であるかどうかに依存します。 By default within Microsoft Web Api, the query string parameter name must match the parameter variable name of the method。たとえば:

を:URLは

"api/MenuData/GetMenu?UserPKId=1" 

ある場合

は、コントローラのメソッドは

public MyModel CommonWebApiMethod(string MethodName, string UserPKId) 

重要でないパラメータ名

は、ルートを設定し、次のパラメータリストを持っている必要があります

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "MethodName", 
      routeTemplate: "api/MenuData/{MethodName}", 
      defaults: new { controller = "Common", action = "CommonWebApiMethod" } 
     ); 
    } 
} 

コントローラー:

public class CommonController : ApiController 
{ 
    [HttpPost] 
    public MyModel CommonWebApiMethod(string MethodName, string parameter) 
    { 
     return new MyModel { MethodName = MethodName, Parameter = parameter }; 
    } 
} 

呼び出すURL:

"api/MenuData/GetMenu?parameter=1" 

重要なパラメータ名

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "ParameterName", 
      routeTemplate: "api/MenuData/{MethodName}/{parameterName}", 
      defaults: new { controller = "Common", action = "CommonWebApiMethod" } 
      ); 
    } 
} 

コントローラー:

public class CommonController : ApiController 
{ 
    [HttpPost] 
    public MyModel CommonWebApiMethod(string MethodName, string parameterName, string parameter) 
    { 
     return new MyModel { MethodName = MethodName, Parameter = parameter }; 
    } 
} 

呼び出すURL:

"api/MenuData/GetMenu/UserPKId?parameter=1" 
関連する問題