2017-02-16 9 views
1

ASP.NET MVC 6を使用して.NET Core Webアプリケーションを使用しています。最も一般的なCRUD操作用の汎用APIコントローラがあります。問題は、複数の異なるタイプのIDがあることです。たとえば、私はintとGuidの両方を持っています。.NET Core Webアプリケーション。オブジェクトをコントローラに渡してキャストすると常に失敗します。

私の一般的な取得・コントローラは、次のようになります。

// GET api/values/5 
[HttpGet("api/[controller]/{id}")] 
public virtual async Task<IEntity> Get(object id) 
{ 
    var myEntity = await _myRepository.FindAsync(id); 
    if (myEntity == null) 
     return ItemNotFound(); 

    return myEntity; 
} 

私が代わりにオブジェクトのint型に取るメソッドのパラメータを変更した場合、それが正常に動作します。しかし、オブジェクトをint型にキャストすると、無効なキャスト例外が発生します。私はそれが予想されるものとしてオブジェクトを正常にキャストする方法はありますか?

+0

文字列はありますか? – niico

+0

これはまた、無効なキャスト例外をスローします。 – user2793442

答えて

3

あなたのデザインに同意するかどうかは、この質問または回答の対象外です。しかし、あなたの問題を解決するには、これを行うことができます:

public virtual async Task<IEntity> Get(string id) 
{ 
    var parsedId; 
    if (int.TryParse(id, out parsedId)) 
    { 
     // It was an integer 
    } 
    else 
    { 
     if (Guid.TryParse(id, out parsedId)) 
     { 
      // It was a Guid 
     } 
     else 
     { 
      // It was neither so what do you want to do? 
     } 
    } 
} 
+0

これはこの問題の解決策であるため、答えとしてマークします。私は、これが最高のデザインではないとも考えていたので、別のIDタイプの異なるベースAPIコントローラクラスを作成して別のルートに行くことにしました。 – user2793442

関連する問題