2017-02-16 11 views
1

У меня есть веб-приложение .NET Core с использованием ASP.NET MVC 6. У меня есть общий контроллер API для наиболее распространенных операций CRUD. Проблема в том, что у меня есть несколько различных типов идентификаторов. Например, у меня есть как int, так и Guid..NET Core Web Application, передача объекта объекту контроллеру и его литье всегда сбой

Мой общий Get контроллер выглядит следующим образом:

// 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, я получаю недопустимое исключение литых. Есть ли способ успешно сделать объект таким, каким я его ожидаю?

+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

Это решение этой проблемы, поэтому я буду отмечать ее как ответ. Я решил пойти альтернативным путем, создав различные классы контроллера api для разных типов идентификаторов, потому что я также думал, что это не лучший дизайн. – user2793442