我的API项目中有一个错误响应模型:
public class ErrorResponse
{
public string ErrorId { get; set;}
public string Message {get; set;}
}
我需要生成一个随机的ErrorId。我看到使用Random类,但只是想知道最好的方法是什么。需要注意的是,我是否需要在ErrorResponse类的构造函数中创建ErrorId并将ErrorId设置为只读(无setter),或者让ErrorId设置为调用类。
答案 0 :(得分:0)
您可以使用Random课程或生成Guid。但我只想扩展我认为你想要做的事情。而不是您自己的自定义错误响应 - 可能考虑使用HttpResponseException或HttpResponseMesssage。您可以在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());
}