Web API错误响应ID

时间:2016-07-26 16:48:11

标签: asp.net-web-api

我的API项目中有一个错误响应模型:

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

我需要生成一个随机的ErrorId。我看到使用Random类,但只是想知道最好的方法是什么。需要注意的是,我是否需要在ErrorResponse类的构造函数中创建ErrorId并将ErrorId设置为只读(无setter),或者让ErrorId设置为调用类。

4 个答案:

答案 0 :(得分:0)

您可以使用Random课程或生成Guid。但我只想扩展我认为你想要做的事情。而不是您自己的自定义错误响应 - 可能考虑使用HttpResponseExceptionHttpResponseMesssage。您可以在Content / reason或消息中包含自定义/随机错误标识符。

    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.”);  
      } 
   }  

答案 1 :(得分:0)

您可以创建一个新的Guid并将其分配给构造函数中的ErrorId:

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

或者,您可能希望为客户端提供http响应并包含ErrorId:

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

答案 2 :(得分:0)

创建随机数的最佳方法是在C#中使用Random类...这是示例

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 class基于(播种)系统时钟相同的随机数。

答案 3 :(得分: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());
}