0

asp.net web api 2.0でurlでパラメータ名 "action"を送信できません。asp.net web apiでパラメータ名 "action"を渡す方法

例:

http://host:port/controller_name?action=2& ...

あなたがそうする場合:コントローラで

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

方法:

public HttpResponseMessage Get(int action) 
    { 
     return ResponseXml(); 
    } 

は、エラーメッセージを表示します。

in the dictionary path name of the parameter "action" is contained in the URL-address more than once

アクションメソッドではなく、パラメータ名 "action"をパラメータとして渡す方法は?

おかげ

+0

クエリーストリング(?action = ..)を使用してアクションパラメータを設定する場合は、ルートマップに設定する必要はありません。あなたの現在のrouteTemplateでは、あなたのurlは/ controllername/actionname/xyzのようにするべきですが、もしそれが必要ならば、action以外のものを使うようにrouteTemplateを変更できませんか? –

+0

@ Karthik MRIは、http:// host:port/controller_name?action = 2&login = **という形式のプロトコルに従ってデータを厳密に受信する必要があります。最初のパラメータはパラメータ名「action」 –

答えて

2

名作用は、クエリ文字列の一部(?アクション= 2)にルートマップを変更する必要が含まれていないので。フレームワークは、アクションメソッドのアクションパラメータに値をバインドします。 routeTemplateの余分な{action}を削除します。あなたのURLフォーマットに{action} host:port/controller_name?action = 2 & login =が含まれていないので、{action}をルートマップから削除してください。 だから、あなたのルートマップは、あなたがAttribute Routingを使用して試してみて、ルートテンプレートに含めることができ

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

、エラーを受け取ります:_コントローラに「値」が見つかりませんでした。名前 '2'_に一致しました。メソッドコントローラ –

+0

からのbindingパラメータ値がrouteTemplateから削除されています。私の答えは –

+0

そのクリアを更新しました。ありがとう。私はすべてのパラメタがルートに厳密に指定されるべきだと思った。 –

0

になります。あなたは、次のURL

actionパラメータが 2にマップされます
http://host:port/controller_name/2 

を使用できるようになる

//GET [controller_route]/2 
[HttpGet] 
[Route("{action:int}")] 
public HttpResponseMessage Get(int action) 
{ 
    return ResponseXml(); 
} 

設定中に属性のルーティングを有効にすることを忘れないでください。

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Attribute routing. 
     config.MapHttpAttributeRoutes(); 

     // Convention-based routing. 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 
関連する問題