1

さまざまな ID タイプでリソースを識別できるようにしたいと考えています。例えば:

GET http://example.com/customers/internalId=34に移動します

public Customer GetByInternalId(int internalId){...}

GET http://example.com/customers/externalId= 'JohnDoe' に移動します

public Customer GetByExternalId(string externalId){...}

ジェネリックコントローラーメソッドに解析ロジックを持たせることでこれを行うことができることはわかっていますが、そうしたくありません。可能であれば、asp.net webapi のルーティング機能を使用してこれを実現するにはどうすればよいですか。

4

2 に答える 2

1

あなたが提案していることをやらないようにすることをお勧めします。同じリソースに対して 2 つの異なる URI を作成すると、キャッシュの使用が難しくなります。代わりに、1 つの URL を使用して別の URL にリダイレクトすることをお勧めします。

例えば

> GET /customers/34
< 200 OK


> GET /Customers?name=JohnDoe
< 303 See Other
< Location: http://example.com/customers/34
于 2013-03-19T01:43:31.667 に答える
0

あなたのメソッドはあまり意味がありません.Get ...で始まるメソッドからvoidを返すのはなぜですか?

また、これらのルート:

http://example.com/customers/internalId=34
http://example.com/customers/externalId='JohnDoe

MVC/Web API の観点からは無効です。これらは次のようになります。

http://example.com/customers?internalId=34
http://example.com/customers?externalId=John

既定の Web API ルーティングでは、2 つを区別し、異なるアクションにルーティングする必要があります。

編集:

次のテンプレートを使用してアクションを作成します。

[HttpGet]
public string InternalId(int id)
{
    return id.ToString();
}

Web API のルートを定義します。

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

これにより、次のように記述できます。

http://localhost:7027/values/internalId=12

それを試してみてください...

次に、別のメソッドを追加できます。

[HttpGet]
public string ExternalId(string id)
{
    return id;
}

この:

http://localhost:7027/values/externalId=bob

同様に機能します。

デフォルトの Web Api テンプレートでこれをテストしたばかりなので、コントローラーの名前は明らかに ValuesController です。

于 2013-03-18T21:35:16.303 に答える