using System; using System.Net; using System.Net.Http; using System.Web.Http; using RevitHttpControl.Models; namespace RevitHttpControl.Common { /// /// 扩展方法类 /// public static class Extensions { /// /// 创建成功响应 /// /// 数据类型 /// 控制器实例 /// 响应数据 /// 响应消息 /// HTTP状态码 /// HTTP响应消息 public static HttpResponseMessage CreateSuccessResponse(this ApiController controller, T data, string message = "操作成功", HttpStatusCode statusCode = HttpStatusCode.OK) { var response = new ApiResponse { Success = true, Code = (int)statusCode, Message = message, Data = data }; return controller.Request.CreateResponse(statusCode, response); } /// /// 创建错误响应 /// /// 控制器实例 /// 错误码 /// 错误消息 /// HTTP状态码 /// 详细错误描述 /// HTTP响应消息 public static HttpResponseMessage CreateErrorResponse(this ApiController controller, string errorCode, string message, HttpStatusCode statusCode = HttpStatusCode.InternalServerError, string errorDescription = null) { var errorData = new { error = errorCode, errorDescription = errorDescription }; var response = new ApiResponse { Success = false, Code = (int)statusCode, Message = message, Data = errorData }; return controller.Request.CreateResponse(statusCode, response); } /// /// 创建验证错误响应 /// /// 控制器实例 /// 验证错误消息 /// HTTP响应消息 public static HttpResponseMessage CreateValidationErrorResponse(this ApiController controller, string message) { return controller.CreateErrorResponse(ErrorCodes.INVALID_REQUEST, message, HttpStatusCode.BadRequest); } /// /// 创建未找到错误响应 /// /// 控制器实例 /// 资源名称 /// HTTP响应消息 public static HttpResponseMessage CreateNotFoundResponse(this ApiController controller, string resourceName = "资源") { return controller.CreateErrorResponse(ErrorCodes.TASK_NOT_FOUND, $"{resourceName}不存在", HttpStatusCode.NotFound); } /// /// 创建异步任务响应 /// /// 控制器实例 /// 任务ID /// 响应消息 /// HTTP响应消息 public static HttpResponseMessage CreateAsyncTaskResponse(this ApiController controller, Guid taskId, string message = "异步任务已创建") { var asyncResponse = new AsyncOperationResponse { TaskId = taskId, StatusUrl = $"/api/task/{taskId}" }; return controller.CreateSuccessResponse(asyncResponse, message, HttpStatusCode.Accepted); } /// /// 验证是否为空或空字符串 /// /// 字符串值 /// 是否为空 public static bool IsNullOrWhiteSpace(this string value) { return string.IsNullOrWhiteSpace(value); } /// /// 安全获取文件名 /// /// 文件路径 /// 文件名 public static string SafeGetFileName(this string filePath) { try { return System.IO.Path.GetFileName(filePath); } catch { return filePath; } } /// /// 任务状态转换为中文描述 /// /// 任务状态 /// 中文描述 public static string ToChineseDescription(this TaskStatus status) { switch (status) { case TaskStatus.Pending: return "等待中"; case TaskStatus.Running: return "运行中"; case TaskStatus.Completed: return "已完成"; case TaskStatus.Failed: return "失败"; case TaskStatus.Cancelled: return "已取消"; default: return "未知状态"; } } /// /// 统计类型转换为中文描述 /// /// 统计类型 /// 中文描述 public static string ToChineseDescription(this StatsType type) { switch (type) { case StatsType.Wall: return "墙"; case StatsType.Door: return "门"; case StatsType.Window: return "窗"; case StatsType.Floor: return "楼板"; case StatsType.Ceiling: return "天花板"; case StatsType.Roof: return "屋顶"; case StatsType.Column: return "柱"; case StatsType.Beam: return "梁"; case StatsType.Furniture: return "家具"; case StatsType.Room: return "房间"; default: return "未知类型"; } } /// /// 验证 GUID 是否有效 /// /// GUID值 /// 是否有效 public static bool IsValidGuid(this Guid guid) { return guid != Guid.Empty; } /// /// 安全转换为 DateTime(UTC) /// /// 本地时间 /// UTC时间 public static DateTime ToUtcSafe(this DateTime dateTime) { return dateTime.Kind == DateTimeKind.Utc ? dateTime : dateTime.ToUniversalTime(); } /// /// 格式化文件大小 /// /// 字节数 /// 格式化后的文件大小 public static string FormatFileSize(this long bytes) { if (bytes < 1024) return $"{bytes} B"; if (bytes < 1024 * 1024) return $"{bytes / 1024:F1} KB"; if (bytes < 1024 * 1024 * 1024) return $"{bytes / (1024 * 1024):F1} MB"; return $"{bytes / (1024 * 1024 * 1024):F1} GB"; } } }