2016-07-26 2 views
0

У меня есть модель отклика ошибки в моем API проекта:Web ошибочный ответ API Id

public class ErrorResponse 
{ 
    public string ErrorId { get; set;} 
    public string Message {get; set;} 
} 

мне нужно сгенерировать случайное ErrorID. Я видел использование класса Random, но просто задавался вопросом, каков наилучший способ сделать это. Некоторое соображение, мне нужно создать ErrorId в конструкторе класса ErrorResponse и сделать ErrorId как доступным только для чтения (без настройки), или я разрешаю ErrorId, заданному вызывающим классом.

+2

Ну, это строковый тип данных - вы можете изменить это. И все зависит от того, как вы его используете. Если вы не сохраняете ошибок нигде или используете протоколирование, я почти не вижу смысла задавать ваш вопрос. –

+0

Он не сохраняется в базе данных. ErrorId для справки. Случай использования, если наши клиенты API получают ошибку, они могут сообщать об ошибке и сообщать об ошибке. Мы можем проверить в нашем журнале этот errorId и проверить подробное сообщение об ошибке. Клиент API в некоторых ошибках просто получит общую ошибку, но с сообщением errorId, который они могут сообщить, мы можем проверить в нашем журнале фактическое/подробное сообщение об ошибке. – alltej

ответ

0

Вы можете использовать класс Random или сгенерировать Guid. Но я просто хочу расширить то, что, как я думаю, вы пытаетесь сделать. Вместо вашего собственного ответа об ошибке - возможно, используя HttpResponseException или HttpResponseMesssage. Вы можете включить пользовательский/случайный идентификатор ошибки в Контент/причина или в сообщении.

public IEnumerable<string> Get() 
    { 
     try 
     { 
      SomeMethod(); 

      return new string[] { "xxx", "yyy" }; 

     } 
     catch (Exception e) 
     { 
      throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError) 
              { 
               Content = new StringContent("An error occurred."), 
               ReasonPhrase = "your custom error id" 
              }); 

      // log 
     } 
    } 

И:

public HttpResponseMessage Get(int id) 
    { 
     try 
     { 
     // your code 
     } 
     catch (Exception ex) 
     { 
     // Log exception code goes here 
     return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "your custom error id.”); 
     } 
    } 
0

Вы можете создать новый Guid и назначить его ErrorID в конструкторе:

public ErrorResponse() 
{ 
    ErrorId = Guid.NewGuid().ToString(); 
} 

В качестве альтернативы, вы можете дать клиенту ответ HTTP и включают ErrorId:

return Content(HttpStatusCode.BadRequest, "ErrorId"); 
0

Лучший способ создать случайное число, чтобы использовать случайный класс в C# ... Вот пример

Random rnd = new Random(); 
int first = rnd.Next(1, 40); //Number between 1(inclusive) and 40(exclusive) 
int second = rnd.Next(10);  //Number between 0 and 9 

Примечание: Если вы собираетесь создать более одного случайных чисел, то вы должны использовать те же экземпляр класса Random. Если вы создадите новый экземпляр слишком близко по времени, есть вероятность, что оба они будут генерировать одинаковые случайные числа, в которых на основе системных часов на основе (засеянных) будет использоваться класс Random.

0

Я использую Random, но не уверен, есть ли последствия в приложении API (из-за безопасности потоков и т. Д.). Поэтому в конструкторе я генерирую ErrorId.

public ErrorResponse() 
{ 
    var random = new Random(); 
    const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890.!+-?"; 
    ErrorId = new string(Enumerable.Repeat(chars, 10) 
     .Select(s => s[random.Next(s.Length)]).ToArray()); 
} 
Смежные вопросы