10

asp.netWebAPIで特定のリソースのURLを作成または生成する方法を探しています。これはApiControllerから継承するため、コントローラーで実行できます。したがって、UrlHelperを取得します。

ApiControllerのコンテキストからリソースURLを作成しようとしています。

4

3 に答える 3

2

これが私がしたことです:

  • HttpContext/Request が必要なため、Application_Start では機能しない可能性があります。
  • WebApi 1 でのみテスト済み
  • GlobalConfiguration に登録されたルートに対してのみ機能します (ただし、他のルートがある場合は、代わりに渡すだけです)。
// given HttpContext context, e.g. HttpContext.Current
var request = new HttpRequestMessage(HttpMethod.Get, context.Request.Url) {
    Properties = {
        { HttpPropertyKeys.HttpConfigurationKey, GlobalConfiguration.Configuration },
        { HttpPropertyKeys.HttpRouteDataKey, new HttpRouteData(new HttpRoute()) },
        { "MS_HttpContext", new HttpContextWrapper(context) }
    }
};

var urlHelper = new UrlHelper(request);
于 2014-10-23T08:49:49.457 に答える
0

UrlHelper クラスはどうですか:

System.Web.Http.Routing.UrlHelper;
System.Web.Mvc.UrlHelper

MVC には、ルーティング情報を受け入れる便利な静的メソッドがいくつかあります。または、RequestContext を渡すことによって作成されたインスタンスとして使用できます (ほとんどの MVC フィルターやその他のさまざまな場所で使用できます)。インスタンス メソッドは、まさに URL を生成するために必要なものでなければなりません。

HTTP は ControllerContext を受け入れます (これは、ほとんどの HTTP フィルターやその他のさまざまな場所でも使用できます)。

于 2012-07-10T13:19:40.940 に答える
-1

以前に使用したことがないため、ApiControllerについてはよくわかりません。その場合、これは冗長になる可能性がありますが、そうでない場合もあります。Global.asax.csファイル、特にRegisterRoutes関数を確認してください。最初に、次のマッピングが表示されます。

  routes.MapRoute ("Default", "{controller}/{action}/{id}", new { controller = "MyController", action = "Index", id = "" });

したがって、デフォルトでは、アプリケーションは次の形式でルートを処理するように設定されています。

 {ControllerName}/{ActionName}/{ResourceId}

次のように設定されたコントローラークラスを使用すると、その形式でリクエストを受信できるようになります。

 class {ControllerName}Controller : ApiController
 {
      public ActionResult {ActionName} (string id)
      {
           // fetch your resource by its unique identifier
      }
 }
于 2012-05-08T00:02:23.200 に答える