0

ここで予備的でやや似た質問をしました。

ここで、Controller メソッド/アクション内の RESTful URL 内から値にアクセスする方法を知る必要があります。

WebApiConfig で次のように設定されたルートを持つ PlatypusController という名前のコントローラーがあります。

config.Routes.MapHttpRoute(
    name: "ReportsApi",
    routeTemplate: "api/{controller}/{unit}/{begindate}/{enddate}",
    defaults: new { enddate = RouteParameter.Optional }
);

PlatypusController.cs には次のコードがあります。

public void Post()
{
    int i = 2; 
}

もちろん、「int i = 2」はナンセンスです。メソッドにブレークポイントを設定して、到達したことを確認できるように、そこに配置しました。「POST」を選択して、Postman に次の URL を入力したときです。

http://localhost:52194/api/Platypus/gramps/201509

(これを呼び出すと、アプリはポート 52194 で実行されます)

しかし、何か価値のあることを達成するには、URL から「おじいちゃん」と「201509」が必要です。どうすればそれらにアクセスできますか? 次のように Post メソッドに追加する必要がありますか?

public void Post(string unit, string begindate)
{
    DoSomething_Anything(unit, begindate);
}

...または、HttpRequest オブジェクトなどから取得する他の方法はありますか?

4

3 に答える 3

3

個人的には、ルートを定義するときに明示的にすることを好みます。そのため、規則ベースのルーティングではなく、属性ルーティングをお勧めします。

そうすれば、コントローラーとアクションごとにルーティングを明示的に構成できます。

WebApiConfig でこの方法でルートを構成する代わりに、次の行を呼び出して属性ルーティングを初期化したことを確認してください。

config.MapHttpAttributeRoutes();

WebApiConfig ファイルで。

次に、次のようなことができます。

[RoutePrefix("api/platypus")]
public class PlatypusController: ApiController
{
     [Route("{unit}/{begindate}")]
     [HttpPost]
     public void Post(string unit, string begindate)
     {
         int i = 2; 
     }
}

このメソッドを呼び出すには、/api/platypus/gramps/201509 に対して POST リクエストを実行します。

于 2015-12-29T22:47:55.380 に答える
1

Post メソッド [FromBody] に追加してみてください

public void Post([FromBody] string unit, [FromBody] string begindate)
{
    DoSomething_Anything(unit, begindate);
}

詳細な例については、これを確認してください: http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

于 2015-12-29T22:47:29.403 に答える
0

3.14 と同じくらい簡単です。これはただダンディに動作します:

public void Post(string unit, string begindate)
{
    string _unit = unit;
    string _begindate = begindate;
}

_unit は " gramps " で、_begindate は " 201509 " で、次の URL を使用します。

http://localhost:52194/api/Platypus/gramps/201509

...だから、それは私が必要とするものです。

于 2015-12-29T22:44:29.567 に答える